Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

JPA CriteriaQuery OneToMany

Tags:

java

jpa

I have two entities with a OneToMany relationship. To make it simple, let's suppose them as School and Students, with a unidirectional relationship from school to students. I want to find the school object that has a specific student (a student with a specific age, name, ssn, ...). I know that I can create a simple criteria as the following for simple School's properties (for School's name, as the following):

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

but, how can I query students with a specific property value while the students is represented as a java.util.List instead of being a basic property?

Can somebody can help me figure this out? I hope I have been able to explain my problem.

Thanks

like image 289
Azad Avatar asked Feb 25 '12 15:02

Azad


1 Answers

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

It looks up a student with name john in all schools.

like image 189
Azad Avatar answered Oct 20 '22 02:10

Azad