我的猜测是这个问题在某个地方得到了回答,但我似乎找不到合适的关键字来搜索。
我有这些实体:
@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/