我有两个具有OneToMany关系的实体。为简单起见,我们假设他们是学校和学生,从学校到学生的单向关系。我想找到一个具有特定学生的学校对象(具有特定年龄,姓名,ssn的学生......)。 我知道我可以为简单的学校属性创建一个简单的标准(对于学校的名称,如下所示):
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
而不是基本属性,我如何查询具有特定属性值的学生?
有人可以帮我解决这个问题吗?我希望我能够解释我的问题。
由于
答案 0 :(得分:5)
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"));
在所有学校中找到一个名叫约翰的学生。
答案 1 :(得分:0)
我想这会做类似的事情;
FROM School sch WHERE 'Student Name' = ANY (SELECT stud.name FROM sch.students stud)