5

我目前在使用 Hibernate 时遇到问题,我会自动创建一个 HQL 语句,看起来像

FROM table ORDER BY a.b ASC NULLS LAST

我的意图是对所有条目进行排序,a.b并将所有条目设置在表末尾的位置ab位置。NULLHibernate 不会抱怨该语句,而只是忽略所有已经存在a的条目NULL。我尝试了设置:

FROM table ORDER BY NULLIF(a.b, NULL) ASC NULLS LAST

再一次,Hibernate 没有抱怨,而是再次忽略了ais 的所有条目NULL

感谢您的帮助!

4

3 回答 3

2

我猜a是table_two类型的属性,并且该属性是用多对一关系或某事物定义的。相似的。

您订购的列不是表的成员,而是相关的 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
于 2012-09-21T09:28:14.593 回答
1

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

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

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

于 2012-09-21T14:00:16.140 回答
1

我刚刚遇到了同样的问题,我执行了左外连接......我有一个CostOrder域,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)

您可以将您的分页/排序信息放在参数中......希望这可以帮助某人:)

于 2015-05-15T15:37:44.447 回答