1

私は4つのエンティティを持っています:

UserTeacherStudentCourse

および 4 つのテーブル:

t_user、t_teacher_course、t_student_course、t_course

TeacherおよびStudentUser(記述子を使用して)拡張し、に格納されているおよびの関係と@ManyToMany関係を持っていますCourse(User持っていません) 。Teachert_teacher_courseStudentt_student_course

ここで、コースを持つすべてのユーザー (存在する場合) を 1 つのクエリで選択したいと思います select u from User u left join fetch u.courses c(ユーザーにはコースがないことに注意してください)。この選択により、次のようなものが生成されます。

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_=?

ご覧のとおり、Hibernate はt_student_courseテーブルに参加していません。

Hibernate 4.1Final を使用しています

質問: Hibernate はそのようなクエリをサポートしていますか?

Studenta)サポートしている場合、エンティティのコースを取得しなかったのはなぜですか?

b) サポートしていない場合、JPQL を使用してコースを持つすべてのユーザーを選択するにはどうすればよいですか?

4

1 に答える 1

2

またはでu.coursesある可能性があるため、Hibernate はそのメタデータでこの名前との最初 (または最後) の関連付けを選択することによってあいまいさを解決します。student.coursesteacher.courses

コレクションの名前がcourses両方のサブクラスで同じでない場合に機能する可能性があります。たとえば、 と を定義できStudent.attendedCoursesますTeacher.teachedCourses

それ以外の場合は、2 つのクエリ (教師用と学生用) を発行し、結果リストに参加する必要があります。または、User エンティティで関連付けを取得する必要があります。

于 2012-06-19T07:37:49.030 に答える