JPA2 CriteriaBuilderを使用して以下のSQLをコードするにはどうすればよいですか?JPA2でSetJoinを使用する
select p from parent p, child c where c.parent_id=p.id and c.code='222' and c.type='SD';
私はSetJoinを使用しようとしましたが、使用方法を理解できませんでした。
おかげで、あなたのクエリに一致する事前
JPA2 CriteriaBuilderを使用して以下のSQLをコードするにはどうすればよいですか?JPA2でSetJoinを使用する
select p from parent p, child c where c.parent_id=p.id and c.code='222' and c.type='SD';
私はSetJoinを使用しようとしましたが、使用方法を理解できませんでした。
おかげで、あなたのクエリに一致する事前
1つの選択肢に:
public void foo() {
// select p from parent p, child c where c.parent_id=p.id and c.code='222' and c.type='SD';
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery <Parent> query = cb.createQuery(Parent.class);
Root <Parent> r1 = query.from(Parent.class);
Root <Child> r2 = query.from(Child.class);
Predicate[] predicates = new Predicate[] {
cb.equal(r1.get(Parent_.id), r2.get(Child_.parentId)),
cb.equal(r2.get(Child_.code), "222"),
cb.equal(r2.get(Child_.type, "SD"))
};
query.select(r1);
query.where(predicates);
List <Parent> result = entityManager.createQuery(query).getResultList();
}
あなたが欲しいものを行うには、多くの方法がありますが、私はあなたのモデルについては何も知らないように、適切なを与えるのは難しいです上記以外の例。
public void foo() {
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery <Parent> query = cb.createQuery(Parent.class);
Root <Child> child = query.from(Child.class);
Join <Child, Parent> parent = child.join(Child_.parent);
Predicate[] predicates = new Predicate[] {
cb.equal(child.get(Child_.code), "222"),
cb.equal(child.get(Child_.type, "SD"))
};
query.select(parent);
query.where(predicates);
List <Parent> result = entityManager.createQuery(query).getResultList();
}
しかし、それは仮定の多くに基づいています:
親子あなたはまた、のような何かを行うことができます関連していることを条件とします。 @Magnus詳細な情報については、私は以下のように私の問題を解決しましありがとう:
predicate = criteriaBuilder.and(predicate, criteriaBuilder.equal(root.join("children", JoinType.INNER).get("code"), location.getCode()));
の例では、メタクラスを使用している前提としています。 –