我目前遇到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
的所有条目。
感谢您的帮助!
答案 0 :(得分:1)
我猜a是table_two类型的属性,并且此属性使用多对一关系或sth定义。类似。
您对不是表的成员但是相关table_two的列进行排序。 Sql不能直接执行此操作,Hibernate通过在table和table_two之间生成连接来实现此目的。 Hibernate生成的这种连接是普通连接,而不是外连接,因此select不会获取table_two中没有相关条目的行。
您可以通过手动定义外部联接来解决问题。这样的事情应该有效:
FROM table t
LEFT OUTER JOIN t.a u
ORDER BY u.b ASC NULLS LAST
答案 1 :(得分:1)
感谢您的回答,我找到了一个更容易实现的不同解决方案。我现在创建一个请求如下:
FROM table ORDER BY a ASC NULLS LAST, a.b ASC NULLS LAST
对我来说,只要这些订单合适,这适用于任何尺寸的链条。由于查询是自动生成的,因此我更容易实现。但是,谢谢你的建议。我试过了,你的解决方案也可以正常工作,但需要我调整我的整体设置。
答案 2 :(得分:1)
我刚遇到同样的问题,我执行了左外连接...我有一个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)
你可以把你的分页/排序信息放在参数中......希望这有助于某人:)