2012-08-07 2 views
0

학생 - 코스 : OneToMany기준을 사용하여 다음 JPQL을 작성하는 방법은 무엇입니까?

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

귀하의 질문은 분명하지 않습니다 : JPQL, 기준 및 귀하의 설명은 3 가지 일을합니다. 정확히 무엇을 얻길 원합니까? 또한 코스에 여러 명의 학생이있는 경우 OneToMany가 아닌 ManyToMany가 있습니다. –

답변

0

입니다.

JOIN FETCH는 모델 주석에 지정된 가져 오기 유형에 관계없이 EAGER 가져 오기를 사용합니다.

기준 API를 사용하는 경우 dao에서 자식의 getter 메소드를 호출하여로드 할 수 있습니다.

0

나는 당신의 학생 단체는 학생 엔티티의 속성 이름 코스와 코스 매핑 관계를 가지고 바랍니다. 여기

는 기준 API에서 JPA QL의 동등한 "FETCH 가입이"없다 기준 쿼리

 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(); 
+0

@Thanks Rahul 당신이 맞을 수도 있지만 JPA 기준을 사용하고 있습니다. –

관련 문제