JPA CriteriaQuery OneToMany - PullRequest
       0

JPA CriteriaQuery OneToMany

7 голосов
/ 25 февраля 2012

У меня есть две сущности со связью OneToMany. Для простоты, давайте предположим, что они как школа и ученики, с однонаправленными отношениями между школой и учениками. Я хочу найти школьный объект, у которого есть конкретный ученик (ученик с определенным возрастом, именем, ссн, ...). Я знаю, что могу создать простой критерий для следующих свойств простой Школы (для имени Школы, как указано ниже):

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

но как я могу запросить студентов с определенным значением свойства, в то время как студенты представлены как java.util.List вместо базового свойства?

Может кто-нибудь помочь мне разобраться? Я надеюсь, что смог объяснить мою проблему.

Спасибо

Ответы [ 2 ]

5 голосов
/ 29 февраля 2012
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"));

Появляется ученик с именем Джон во всех школах.

0 голосов
/ 07 июня 2016

Полагаю, это сделало бы то же самое;

FROM School sch WHERE 'Student Name' = ANY (SELECT stud.name FROM sch.students stud)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...