Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 查询-从3个表联接_Java_Mysql_Jpa_Named Query - Fatal编程技术网

Java 查询-从3个表联接

Java 查询-从3个表联接,java,mysql,jpa,named-query,Java,Mysql,Jpa,Named Query,我需要做一个连接查询,来自3个表,教授,老师和学生。每个教授都有一份教师名单,每个教师都有一份学生名单。我正在开发一个web服务,该服务将只给我教授id,并基于此,我需要获得这位教授的所有学生。所以我需要先得到老师的名单,然后从中我可以得到所有的学生。 有人能帮忙吗?我不想使用级联选择。我想使用joinfetch,因为我使用的是jpa 表教授:教授id、教授姓名、教授地址 表教师:教师id、教授id、教师姓名 表学生:学生id、教师id、学生姓名、学生地址由于您没有提到表结构,最简单的查询是执行

我需要做一个连接查询,来自3个表,教授,老师和学生。每个教授都有一份教师名单,每个教师都有一份学生名单。我正在开发一个web服务,该服务将只给我教授id,并基于此,我需要获得这位教授的所有学生。所以我需要先得到老师的名单,然后从中我可以得到所有的学生。 有人能帮忙吗?我不想使用级联选择。我想使用joinfetch,因为我使用的是jpa

表教授:教授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建议的解决方案