Java 查询-从3个表联接
我需要做一个连接查询,来自3个表,教授,老师和学生。每个教授都有一份教师名单,每个教师都有一份学生名单。我正在开发一个web服务,该服务将只给我教授id,并基于此,我需要获得这位教授的所有学生。所以我需要先得到老师的名单,然后从中我可以得到所有的学生。 有人能帮忙吗?我不想使用级联选择。我想使用joinfetch,因为我使用的是jpa 表教授:教授id、教授姓名、教授地址 表教师:教师id、教授id、教师姓名Java 查询-从3个表联接,java,mysql,jpa,named-query,Java,Mysql,Jpa,Named Query,我需要做一个连接查询,来自3个表,教授,老师和学生。每个教授都有一份教师名单,每个教师都有一份学生名单。我正在开发一个web服务,该服务将只给我教授id,并基于此,我需要获得这位教授的所有学生。所以我需要先得到老师的名单,然后从中我可以得到所有的学生。 有人能帮忙吗?我不想使用级联选择。我想使用joinfetch,因为我使用的是jpa 表教授:教授id、教授姓名、教授地址 表教师:教师id、教授id、教师姓名 表学生:学生id、教师id、学生姓名、学生地址由于您没有提到表结构,最简单的查询是执行
表学生:学生id、教师id、学生姓名、学生地址由于您没有提到表结构,最简单的查询是执行以下操作,假设您在学生表中将teacherid作为外键,在教师表中将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;
以下是针对您的需求的JPA查询。 请注意,StudentModel应该映射到student表。StudentModel应该有一个属性'teacher',它是'TeacherModel'类型。 TeacherModel应该具有类型为“ProfessorModel”的“professor”属性,那么只有该属性有效
<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>
或者使用sql命名查询,我们也可以这样做
<sql-query name="findStudentsByProfessorID">
<query-param name="professorid" type="long" />
<![CDATA[
select * from student s join teacher t
on s.teacherid = t.teacherid where t.professorid = :professorid;
]]>
</sql-query>
请提供表格的模式,以便人们更好地理解您的问题。是的,我有您提到的教授id和教师id。谢谢但是除了cascade-select之外还有其他选择吗?您希望避免cascade-select的具体原因是什么?它在我的jpa类中不起作用。你知道如何使用JOIN fetch吗?我还没有在jpa上工作过。您可能可以尝试@Sudhakar建议的解决方案