0

学生 - コース : OneToMany

JPQL :

Student から Student を選択します。 Course course where student.name=:STUDENTNAME and (course.courseName=:COURSENAME or course.courseDuration=courseDuration)

1 人の学生が 10 のコースを持っているとします。Student - Courses(2) を持つ 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

あなたの学生エンティティが、学生エンティティのプロパティ名 course との Course マッピングと関係があることを願っています。

ここに基準クエリがあります

        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 フェッチを使用します。

クライテリア API を使用している場合は、dao で子の getter メソッドを呼び出して、ロードすることができます。

于 2012-08-16T06:43:05.807 に答える