Hibernate结合两个没有关系的HQL查询

时间:2019-10-04 15:28:30

标签: hibernate hql

我正在使用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

1 个答案:

答案 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