mysql - Hibernate 按可能为空的字段排序

标签 mysql hibernate jpa hql

我的猜测是这个问题在某个地方得到了回答,但我似乎找不到合适的关键字来搜索。

我有这些实体:

@Entity
Entity1{
    <random fields>

    @OneToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "entity_2")
    Entity2 e2;//might be null.
}

@Entity
Entity2{
    <random fields>
    String name;
}

我想编写一个查询,返回按实体 2 的名称排序的所有实体 1。我试过这个:

SELECT e1 from Entity1 e1 ORDER BY e1.e2.name ASC

上述查询(在 mysql 上测试)的问题是它只返回 Entity1 的 e2 不为空。

我需要的是一种获取所有 Entity1 的方法,即使 e2 为 null。

附言。我也试过这些,结果相同:

SELECT e1 from Entity1 e1 ORDER BY e1.e2 ASC, e1.e2.name ASC
SELECT e1 from Entity1 e1 ORDER BY e1.e2.name ASC, e1.e2 ASC

提前致谢!
//hql新手

编辑:
添加了我使用的 jpa 注释。

最佳答案

如果您使用的是 JPA,使用 Annotations 对您的问题来说非常简单.. 这样我就给出了一个使用 Annotaion 的例子

当域对象中有关联对象的集合时,您通常希望指定某种默认排序顺序。例如,假设我有域对象时间轴和事件:

@Entity
class Event {

    @Required
    Integer startYear

    Integer endYear

    @Required
    String description

    @ManyToOne
    Timeline timeline
}

此排序顺序与使用具有“startYear, endYear”排序顺序的 JPA @OrderBy 相同。但是,由于您在 Hibernate 的 @OrderBy 中编写了实际的 SQL,因此您可以利用数据库具有的任何功能,但可能会以跨数据库的可移植性为代价。例如,Oracle 10g 支持使用“按 start_year 排序,end_year 空值优先”这样的语法在非空结束年份之前对空结束年份进行排序。

@org.hibernate.annotations.OrderBy。将 SQL 片段添加到域类中不一定是世界上最优雅的事情,但它可能是最实用的事情。

关于mysql - Hibernate 按可能为空的字段排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13988686/

相关文章:

java - Hibernate:检查哪个实体的字段被修改

java - 升级我的 Spring WebFlow 项目以使用 Maven 和 Hibernate4。现在获取 NoSuchMethodException : org. hibernate.cfg.Configuration.addAnnotatedClass

java - JPA双向@ManyToMany关系: Assignment causes two inserts

mysql - 如何在没有 key 的情况下连接表?

java - 如何使用java从mysql数据库中获取图像

通过 SSH 隧道进行 MySQL 复制

java - JPA 从多对一关系中获取值(value)

java - mysql 数据类型 SET 的 Hibernate 注释

java - JPA:从实体到实体的 HashMap 在连接表中获取错误的主键

javascript - 创建从 C# 到 JavaScript 的动态 JSON