2011-04-14 86 views
9

我有一个类CustomerCustomerDependant实体。 Customer与其家属有多方面的许多双向关系。我需要找到按名称和相关名称过滤的客户。JPA Criteria API:如何选择嵌套集合中的属性

它做了这样的事情在JPQL:

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

我如何做同样的事情与JPA标准的查询?

回答

10

从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持久化查询语言查询:

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是一种连接,所以我想你也可以尝试一下。