2012-02-25 207 views
5

我有兩個OneToMany關係的實體。爲了簡單起見,我們假設他們是學校和學生,從學校到學生都有單向關係。我想找到具有特定學生的學校對象(具有特定年齡,名稱,ssn,...的學生)。 我知道我可以創建一個簡單的標準,作爲簡單的學校的屬性如下(學校的名稱,如以下):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 + "%"); 

,但是,我怎麼可以查詢學生與一個特定的屬性值,同時學生是表示爲java.util.List而不是基本屬性?

有人可以幫我解決這個問題嗎?我希望我能解釋我的問題。

感謝

回答

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

它會查找所有學校名稱約翰的學生。

+0

新來的jpa在這裏。你是怎麼得到'School_.students'的。我正在嘗試類似的事情,但不知道這個'_'是什麼意思。 – 2017-09-15 10:04:54

+0

@VijayKalidindi元模型生成JPA,看看這個。 https://docs.jboss.org/hibernate/orm/5.0/topical/html/metamodelgen/MetamodelGenerator.html – BalaajiChander 2018-02-07 09:35:34

0

我想這會做類似的事情;

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