0

学生 - 课程:OneToMany

JPQL:

从 Student student, Course course where student.name=:STUDENTNAME and (course.courseName=:COURSENAME or course.courseDuration=courseDuration) 中选择 Student

让我们假设一个学生可能有 10 门课程,我只想检索两条包含 Student - Courses(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);
4

2 回答 2

0

我希望您的学生实体与课程映射与学生实体中的属性名称课程有关系。

这是标准查询

        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();
于 2012-08-07T10:10:45.333 回答
0

在 Criteria API 中没有等效的 JPA QL “JOIN FETCH”。

JOIN FETCH 使用 EAGER 提取,而与模型注释中指定的提取类型无关。

如果你使用的是criteria api,你可以在dao中调用child的getter方法,让它被加载。

于 2012-08-16T06:43:05.807 回答