Hibernate/JPA Criteria Queryの使用方法


  1. 基本的なクエリの作成: CriteriaBuilderを使用して、CriteriaQueryオブジェクトを作成し、ルートエンティティを指定します。次に、条件やソート順などのクエリの詳細を指定します。最後に、EntityManagerを使用してクエリを実行します。
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<Entity> query = cb.createQuery(Entity.class);
Root<Entity> root = query.from(Entity.class);
query.select(root);
query.where(cb.equal(root.get("columnName"), value));
query.orderBy(cb.asc(root.get("columnName")));
List<Entity> results = entityManager.createQuery(query).getResultList();
  1. 条件の追加: 複数の条件を組み合わせてクエリを作成する場合、Predicateオブジェクトを使用します。
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<Entity> query = cb.createQuery(Entity.class);
Root<Entity> root = query.from(Entity.class);
Predicate condition1 = cb.equal(root.get("column1"), value1);
Predicate condition2 = cb.like(root.get("column2"), "%" + value2 + "%");
query.select(root);
query.where(cb.and(condition1, condition2));
List<Entity> results = entityManager.createQuery(query).getResultList();
  1. 関連エンティティの結合: 複数のエンティティを結合してクエリを作成する場合、Joinオブジェクトを使用します。
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<Entity> query = cb.createQuery(Entity.class);
Root<Entity> root = query.from(Entity.class);
Join<Entity, RelatedEntity> join = root.join("relatedEntity");
query.select(root);
query.where(cb.equal(join.get("columnName"), value));
List<Entity> results = entityManager.createQuery(query).getResultList();
  1. 集計関数の使用: クエリの結果を集計する場合、CriteriaBuilderを使用して集計関数を指定します。
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<Long> query = cb.createQuery(Long.class);
Root<Entity> root = query.from(Entity.class);
query.select(cb.count(root));
Long count = entityManager.createQuery(query).getSingleResult();

これらはHibernateとJPAのCriteria Queryを使用してクエリを行うための基本的な例です。さまざまな条件や操作を組み合わせることで、より複雑なクエリを作成することもできます。詳細な情報については、HibernateとJPAの公式ドキュメントを参照してください。以上のコード例と説明をブログ投稿に組み込むことで、読者にHibernate/JPAのCriteria Queryの使用方法を詳しく解説することができます。