我需要从3桌教授,老师和学生那里做一个连接查询。每位教授都有一份教师名单,每位教师都有一份学生名单。我正在开发一个网络服务,它只给我教授身份和基础,我需要让这位特殊教授的所有学生。所以我需要先得到老师名单,然后从中我可以得到所有学生。 有人可以帮忙吗?我不想使用级联选择。我想使用JOIN FETCH,因为我正在使用jpa。
表教授:教授身份,教授姓名,教授地址
表格老师:教师ID,教授ID,教师姓名
表学生:学生ID,教师ID,学生姓名,学生地址
答案 0 :(得分:2)
以下是您的要求的JPA查询。 请注意,StudentModel应映射到student表。 StudentModel应该有一个属性'老师'这是' TeacherModel'类型。 老师模特应该有“教授”这样的教授。其类型为' ProferssorModel'然后才有效。
DATE
或使用sql命名查询,我们也可以这样做。
<query name="findStudentsByProfessorID">
<query-param name="professorId" type="Long" />
SELECT student
FROM StudentModel student
inner join fetch student.teacher teacher
inner join fetch teacher.professor professor
WHERE professor.id = :professorId
</query>
答案 1 :(得分:1)
由于您没有提到表结构,最简单的查询是执行以下操作,假设您将studentid作为student表中的外键,并将professorid作为教师表中的外键:
Select * from student s
where s.teacherid in
(select t.teacherid from teacher t where t.professorid = 1);
使用子查询/级联选择的替代方法是使用连接。
select * from student s join teacher t
on s.teacherid = t.teacherid where t.professorid = 1;