我正在使用Hibernate,这是我的情况:
我有两个实体,它们之间没有任何关系(存在的唯一关系是逻辑关系,这就是问题所在)。
这两个实体就像Student和FinalExam。
学生和考试是这样的:
class Student {
private String name;
private String surname;
private int age;
}
class FinalExam {
private String candidateName;
private String candidatesurname;
private int mark;
}
我想创建一个具有以下列的HQL查询:名称,姓氏,通过。
名称和姓氏是学生的名称和姓氏,是两个实体之间的联系。
传递的列可以为true或false。它表示学生是否通过了考试。
因此,如果在FinalExam中存在一行标记高于6的标记,则为真。
我该如何实现?
我想要这样的东西:
select s.name, s.surname, ( Select count(*)>1 from FinalExam exam
where exam.name = s.name
and exam.surname = s.surname
and exam.mark > 6)
from Student s
答案 0 :(得分:1)
您必须将属性添加到Student
类中,如下所示:
private boolean passed;
此属性一定不能保存在数据库中(如果使用JPA批注,则会在广告@Transient上进行注释,如果使用XML映射,则不要放入XML文件中,或者如果使用,则可以使用带有插入和更新属性设置为false。
关于您的查询(我假设您已经在您的课程中添加了此属性):
SELECT s.name, s.surname,
(SELECT
CASE WHEN COUNT(*) > 0 THEN 1 ELSE 0 END
FROM FinalExam f
WHERE f.name = s.name
AND f.surname = s.surname
AND f.mark > 6)
FROM Student s