gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 03:40:57 26 4
gpt4 key购买 nike

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

我有这些实体:

@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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com