一个学生有多个老师,一个老师有多个学生。
现从学生这端出发。
student类里有个private Set<Teacher> teachers;和其它普通属性。
比如
学生A有老师1和老师2。
学生B有老师2和老师3。
学生C有老师1和老师2。
学生D有老师1和老师2和老师3。
学生E有老师1和老师2。
学生F有老师1和老师2和老师3和老师4。
学生A和学生C,学生E有相同的老师SET.
要根据学生A的ID来查找到学生C和学生E。
问题1:这条HQL语句该怎么写?
问题2:(加分)
学生D有老师1和老师2和老师3。
那学生ABCE也在(1,2,3)中。
根据学生D的ID来查出ABCE来的HQL语句有加分 

解决方案 »

  1.   

    问题1:select t.studentId from Teacher t where t.teacherId in (select t.teacherId from Student s inner join fetch s.Teacher t where s.studentId = t.studentId)
      

  2.   

    楼上你好。我这个是多对多。所以老师这边是private Set<Student> students,而不是studentId.谢谢
      

  3.   

    不好意思写错了。。
    select t.Student from Teacher t where t.teacherId in (select t.teacherId from Student s inner join fetch s.Teacher t where s.studentId = t.studentId)
    这样子只是找出了A学生老师的学生如果要写完,感觉好长
      

  4.   

    先把A学生查出来 在用点级联 A.techer.students()就OK了啊