学生 - 课程:OneToMany
JPQL:
从学生中选择学生,课程在哪里 student.name =:STUDENTNAME和(course.courseName =:COURSENAME或 course.courseDuration = courseDuration)
让我们假设一名学生可能有10门课程,我只想找回两份有学生课程的记录(2)。
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<Student> criteriaQuery = criteriaBuilder.createQuery(Student.class);
Root<Student> studentRoot = criteriaQuery.from(Student.class);
studentRoot.fetch("courses", JoinType.LEFT);
Predicate condition = criteriaBuilder.equal(studentRoot.get("studentName"), "someName");
//how to add course condition here.
criteriaQuery.where(condition);
答案 0 :(得分:0)
我希望您的学生实体与课程映射与学生实体中的属性名称课程有关。
这是Criteria Query
Criteria criteria = getSession().createCriteria(Student.class);
criteria.createAlias("course", "course");
criteria.add(Restrictions.eq("name", STUDENTNAME));
Criterion courseNameCrit = Restrictions.eq("course.courseName", courseName);
Criterion courseDurationCrit = Restrictions.eq("course.courseDuration", courseDuration);
criteria.add(Restrictions.disjunction().add(courseNameCrit).add(courseDurationCrit));
List<Student> studentList = criteria.list();
答案 1 :(得分:0)
Criteria API中没有等效的JPA QL“JOIN FETCH”。
JOIN FETCH使用EAGER提取,而不管模型注释中指定的提取类型。
如果使用条件api,可以在dao中调用child的getter方法,以便加载它。