11

クラスCustomerCustomerDependantエンティティがあります。Customer依存関係と多対多の双方向関係があります。名前と従属名でフィルタリングする顧客を見つける必要があります。

JPQL では次のようになります。

select c join fetch c.dependants d from Customer c where c.name like
'foo' and d.name like 'foo'

JPA基準クエリで同じことを行うにはどうすればよいですか?

4

1 に答える 1

14

JPA 仕様セクション 6.5.4 から取得

CriteriaQuery<Department> q = cb.createQuery(Department.class);
Root<Department> d = q.from(Department.class);
d.fetch(Department_.employees, JoinType.LEFT);
q.where(cb.equal(d.get(Department_.deptno), 1)).select(d);

このクエリは、次の Java Persistence クエリ言語クエリと同等です。

SELECT d
FROM Department d LEFT JOIN FETCH d.employees
WHERE d.deptno = 1

これは私がフェッチせずに行うことです

CriteriaQuery<Department> q = cb.createQuery(Department.class);
Root<Department> dept = q.from(Department.class);
Join<Department,Employee> emp = d.join(Department_.employees);
q.where(cb.equal(emp.get(Employee_.name),"edalorzo"));

Fetch は結合の一種なので、それも試してみるとよいでしょう。

于 2011-04-14T03:16:42.657 に答える