2011-04-14 18 views
9

Tengo una clase Customer y CustomerDependant entidades. Customer tiene muchas a muchas relaciones bidireccionales con sus dependientes. Necesito encontrar clientes filtrando por nombre y nombre dependiente.API de criterios JPA: Cómo seleccionar una propiedad en la colección anidada

Se ha hecho algo como esto en JPQL:

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

¿Cómo puedo hacer lo mismo con la APP consultas de criterios?

Respuesta

10

Tomado de la sección APP especificación 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); 

Esta consulta es equivalente a la siguiente persistencia de Java lenguaje de consulta consulta:

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

Esto es lo que hago sin ir a buscar

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")); 

Buscar es un tipo de unión, así que supongo que también puedes experimentar con eso.

Cuestiones relacionadas