不相关 类 上的 JPQL 多个左连接

JPQL Multiple Left Joins on Unrelated Classes

我有三个包含列的表(错误的假名):

STUDENT (student_id)
STUDENT_UNIQUE_INFO (student_unique_info_id, student_id)
STUDENT_OTHER_INFO (student_other_info_id, student_id)

我希望我可以更改架构,但我不能。 有些同学没有unique_infoand/orother_info.

我的结果集是这样的:

STUDENT_ID | STUDENT_UNIQUE_INFO_FIELDS... | STUDENT_OTHER_INFO_FIELDS...

如果学生没有任何字段,字段有时可能为空。

问题是 most examples 会让 STUDENT 包含其他表的 ID,我没有那个选项。

我尝试了类似的东西(输出到一个新的对象,它包含了用于连接这个东西的所有 3 个表)

SELECT NEW path.to.outputObj(S,
       (SELECT SUI
       FROM path.to.SUI SUI
       WHERE S.studentId = SUI.studentId),
       (SELECT SOI
       FROM path.to.SOI SOI
       WHERE S.studentId = SOI.studentId))
       FROM STUDENT S

但是因为一些学生在student_other_info.

中有多个条目而爆炸了
java.sql.SQLException: Subquery returns more than 1 row

我只是有点不知道该怎么做。

您应该将其他两个表映射为列表,每个学生可以包含 0..n 行。

class Student {
   @OneToMany(mappedBy = "student");
   List<StudentUniqueInfo> studentUniqueInfoList;

   @OneToMany(mappedBy = "student");
   List<StudentOtherInfo> studentOtherInfoList;
   ...
}

然后 StudentUniqueInfo.javaStudentOtherInfo.java 各有一个字段

 @JoinColumn(name = "STUDENT_ID")
 private Student student;