【问题标题】:Hibernate Combine two HQL query without relationsHibernate 结合两个没有关系的 HQL 查询
【发布时间】:2019-10-04 15:28:30
【问题描述】:

我正在使用 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 查询以包含以下列:姓名、姓氏、已通过。
姓名和姓氏是学生的姓名和姓氏,是两个实体之间的联系。
传递的列可以是真或假。它代表学生是否通过了考试。
因此,如果在 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

【问题讨论】:

  • 我不这么认为,在您提到的答案中,所有数据都仅从 UserVideoRating 一个实体中获取。就我而言,我有 2 个实体。
  • 您的语法不正确。您将在上面的链接中找到编写此类查询的正确语法。
  • 仍然不清楚什么是正确的语法。你能帮我@Sam吗?
  • 首先如果你执行count(*)>1,那么你会得到ERROR: No query specified。使用正确的查询更新您的问题。

标签: hibernate hql


【解决方案1】:

您必须在Student 类中添加一个属性,如下所示:

private boolean passed;

这个属性一定不能保存在DB上(如果你使用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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-02
    • 2015-06-23
    • 2011-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多