1

我有 4 个实体:

User, Teacher, Student,Course

和4张桌子:

t_user、t_teacher_course、t_student_course、t_course

TeacherStudent扩展User(带有描述符)并@ManyToManyCourseUser不具有) Teacher存储在中的关系t_teacher_courseStudent存储在中的关系有关系t_student_course

现在我想在一个查询中选择所有有课程的用户(如果他们存在) 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

我正在使用休眠 4.1Final

问题:Hibernate 是否支持这样的查询

a)如果支持,那么为什么它没有为Student实体获取课程?

b) 如果不支持,我该如何选择所有使用 JPQL 的课程的用户?

4

1 回答 1

2

由于u.courses可能是student.coursesor teacher.courses,Hibernate 通过在其元数据中选择与该名称的第一个(或最后一个)关联来解决歧义。

courses如果两个子类中的集合名称不同,它可能会起作用。例如,您可以定义Student.attendedCoursesTeacher.teachedCourses

否则,您必须发出两个查询(一个给教师,一个给学生),然后加入结果列表。或者您必须在 User 实体中提取关联。

于 2012-06-19T07:37:49.030 回答