Hibernate Order by(链接)列,该列可以为空

Hibernate Order by(链接)列,该列可以为空,hibernate,null,sql-order-by,hql,Hibernate,Null,Sql Order By,Hql,我目前在Hibernate中遇到了一个问题,我自动创建了一个HQL语句 FROM table ORDER BY a.b ASC NULLS LAST 我的意图是按a.b对所有条目进行排序,并将a或b为NULL的所有条目设置到表的末尾。Hibernate并不抱怨该语句,只是忽略了a已经为NULL的所有条目。我尝试设置: FROM table ORDER BY NULLIF(a.b, NULL) ASC NULLS LAST 同样,Hibernate不会抱怨,但会再次忽略a为NULL的所有条目

我目前在Hibernate中遇到了一个问题,我自动创建了一个HQL语句

FROM table ORDER BY a.b ASC NULLS LAST
我的意图是按
a.b
对所有条目进行排序,并将
a
b
NULL
的所有条目设置到表的末尾。Hibernate并不抱怨该语句,只是忽略了
a
已经为
NULL
的所有条目。我尝试设置:

FROM table ORDER BY NULLIF(a.b, NULL) ASC NULLS LAST
同样,Hibernate不会抱怨,但会再次忽略
a
NULL
的所有条目


谢谢你的帮助

我猜a是table_two类型的属性,这个属性是用多对一关系或类似的东西定义的

您对一列进行排序,该列不是表的成员,而是相关表的成员。Sql不能直接做到这一点,Hibernate通过在表和表2之间生成联接来做到这一点。Hibernate生成的这个连接是一个普通连接,而不是外部连接,因此select不会获取表2中没有相关条目的行

可以通过手动定义外部联接来解决此问题。像这样的方法应该会奏效:

FROM table t
   LEFT OUTER JOIN t.a u
   ORDER BY u.b ASC NULLS LAST

谢谢你的回答,我找到了一个更容易实施的不同解决方案。我现在创建一个请求,如下所示:

FROM table ORDER BY a ASC NULLS LAST, a.b ASC NULLS LAST

对我来说,这适用于任何尺寸的链条,只要这些顺序是确定的。这对我来说更容易实现,因为查询是自动生成的。不过,谢谢你的建议。我试过了,您的解决方案也很好,但需要我调整整体设置。

我刚刚遇到同样的问题,我执行了左外连接。。。我有一个
Cost
Order
域,Order属性是一个嵌套关系实例;这可能是
NULL
。为了更加清晰,即:

class Cost { 
    User  owner 
    Order order 
    etc...
}

Cost.executeQuery('SELECT c FROM Cost AS c LEFT OUTER JOIN c.order AS o WHERE c.owner = ? ORDER BY o.orderNumber ASC, c.id DESC' , cost_qry_params, params)

您可以将分页/排序信息放入参数。。。希望这对某人有所帮助:)

我想应该是
左加入
outer
不是HQL。
left-outer-join
left-join
是相同的。后者只是前者的缩写。这在SQL中是正确的。我认为在HQL中,只有
左连接
。我可能错了……是的,你错了。顺便说一句,在HQL中,您不需要查询表。这个查询实际上是来自实体的
。我有点不明白为什么它对你有用。对我来说不是这样的(hibernate仍然在下面创建一个连接,并丢弃a为null的行)可能依赖于DB。当时我用的是甲骨文11。