我有三个带有列的表(错误的假名):
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
我甚至不知道该怎么做。
答案 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;