2012-06-19 3 views
1

내가 4 개 단체 있습니다최대 절전 모드 상속 쿼리

User, Teacher, Student, Course

4 테이블 : t_course

t_user, t_teacher_course, t_student_course을

TeacherStudent Teacher의 관계 t_teacher_course에 저장 Student의 관계 t_student_course 저장 (descriminators)와 UserCourse@ManyToMany와 관계를 갖는다 (User 가지고 있지 않음)으로 연장된다.

select 
    ... 
from 
    T_USER user0_ 
left outer join 
    T_TEACHER_COURSE course1_ 
     on user0_.USERID_=courses1_.TEACHER_ 
left outer join 
    T_COURSE course2_ 
     on courses1_.LANE_=course2_.COURSENAME_ 
where 
    user0_.GROUP_=? 

로 :

지금 내가 한 쿼리에서 (가있는 경우) select u from User u left join fetch u.courses c (통지 사용자가하지 않아도 과정) 이 같은이 선택 생성 뭔가를 코스 모든 사용자를 선택합니다 당신은 Hibernate가 내가 최대 절전 모드 4.1Final

을 사용하고

테이블 t_student_course 연결되지 않았다 명확하게 볼 수 있습니다 6,

질문 : 합니까 최대 절전 모드 지원 등의 쿼리

가) 지원하는이 Student 엔티티의 인출 과정하지 않았다 왜 경우?

b) JPQL을 사용하여 코스에서 모든 사용자를 선택하려면 어떻게해야합니까?

답변

2

u.coursesstudent.courses 또는 teacher.courses 일 수 있으므로 Hibernate는 메타 데이터에서이 이름과의 첫 번째 (또는 마지막) 연관을 선택하여 모호성을 해결합니다.

courses 컬렉션의 이름이 두 하위 클래스 모두에서 동일하지 않은 경우 작동 할 수 있습니다. 예를 들어 Student.attendedCoursesTeacher.teachedCourses을 정의 할 수 있습니다.

그렇지 않으면 교사는 두 명과 학생은 한 명씩 두 가지 질문을하고 결과 목록에 참여해야합니다. 또는 User 엔터티에서 연결을 풀어야합니다.

+0

우우! 필드 이름을 변경하면 문제가 해결되었습니다! 고마워요! 대답을하기 전에 3을 선택해야했습니다. Hibernate가 ** 모호성에 대해 경고해야한다고 생각합니다 ** –