2012-02-25 27 views
5

Tôi có hai thực thể với mối quan hệ OneToMany. Để làm cho nó đơn giản, chúng ta hãy giả sử chúng như là trường học và học sinh, với một mối quan hệ một chiều từ trường cho học sinh. Tôi muốn tìm đối tượng của trường có một học sinh cụ thể (một học sinh với một độ tuổi cụ thể, tên, ssn, ...). Tôi biết rằng tôi có thể tạo ra một tiêu chí đơn giản như sau đối với tài sản đơn giản School (tên trường, như sau):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 + "%"); 

nhưng, làm thế nào tôi có thể truy vấn các sinh viên với giá trị tài sản cụ thể trong khi các sinh viên là được đại diện là java.util.List thay vì là tài sản cơ bản?

Ai đó có thể giúp tôi tìm ra điều này? Tôi hy vọng tôi đã có thể giải thích vấn đề của tôi.

Cảm ơn

Trả lời

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

Nó ngước lên một học sinh có tên john trong tất cả các trường.

+0

Mới với jpa tại đây. Làm thế nào bạn nhận được 'School_.students'. Tôi đang cố gắng một điều tương tự nhưng không biết điều này '_' có nghĩa là gì. –

+0

@VijayKalidindi thế hệ metamodel trong JPA, Hãy xem cái này. https://docs.jboss.org/hibernate/orm/5.0/topical/html/metamodelgen/MetamodelGenerator.html – BalaajiChander

0

Tôi đoán điều đó sẽ làm điều tương tự;

FROM School sch WHERE 'Student Name' = ANY (SELECT stud.name FROM sch.students stud) 
Các vấn đề liên quan