2012-02-25 14 views
5

Mam dwa podmioty o relacji OneToMany. Aby to było proste, załóżmy, że są to Szkoły i Studenci, z jednokierunkowymi relacjami ze szkoły do ​​uczniów. Chcę znaleźć obiekt szkolny, który ma określonego ucznia (studenta w określonym wieku, imię, ssn, ...). wiem, że mogę stworzyć prosty kryteria następujące dla właściwości Szkoła proste (na nazwę szkoły, tak jak poniżej):JPA CriteriaQuery OneToMany

ParameterExpression<String> p = criteriaBuilder.parameter(String.class, "schoolName"); 
      criteria = criteriaBuilder.and(criteria, criteriaBuilder.like(schoolRoot.get("schoolName") , p)); 
queryResult.setParameter("schoolName", schoolName + "%"); 

ale, jak mogę zapytać uczniów o określonej wartości nieruchomości, podczas gdy studenci są reprezentowana jako java.util.List zamiast być podstawową własnością?

Czy ktoś może mi pomóc rozwiązać ten problem? Mam nadzieję, że udało mi się wyjaśnić mój problem.

Dzięki

Odpowiedz

4
CriteriaBuilder criteriaBuilder = getEntityManager().getCriteriaBuilder(); 
CriteriaQuery<School> query = criteriaBuilder.createQuery(School.class); 
Root<School> schoolRoot = query.from(School.class); 
Join<School, Student> join = schoolRoot.join(School_.students); 
query.where(criteriaBuilder.equal(join.get(Student_.name), "john")); 

Wydaje się studenta o nazwie John we wszystkich szkołach.

+0

Nowy jpa tutaj. Jak zdobyłeś 'School_.students'. Próbuję coś podobnego, ale nie wiem, co to znaczy "_". –

+0

@VijayKalidindi generacji metamodel w WZP, Spójrz na to. https://docs.jboss.org/hibernate/orm/5.0/topical/html/metamodelgen/MetamodelGenerator.html – BalaajiChander

0

Sądzę, że zrobiłoby to coś podobnego;

FROM School sch WHERE 'Student Name' = ANY (SELECT stud.name FROM sch.students stud) 
Powiązane problemy