2012-02-25 217 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)