JPQL无关类上的多个左联接

时间:2019-01-17 18:59:42

标签: java sql jpa jpql

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

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

我希望我可以更改架构,但不能。 一些学生没有unique_info和/或other_info。

我的结果集如下:

STUDENT_ID | STUDENT_UNIQUE_INFO_FIELDS... | STUDENT_OTHER_INFO_FIELDS...

如果学生没有任何字段,则该字段有时为空。

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

我尝试了类似的操作(输出到一个新的obj,该obj接收了用于连接该对象的所有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

我甚至不知道该怎么做。

1 个答案:

答案 0 :(得分:1)

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

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

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

然后 StudentUniqueInfo.java StudentOtherInfo.java 都将具有一个字段

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