通过特殊安排进行冬眠排序

时间:2015-08-28 03:43:41

标签: hibernate

我现在面临一个关于从DB获取结果的问题。 我想按ASC排序,但我想做一个例外,“其他人”。所以选择“其他”将是最后的选择。我该如何实现呢? 所以,ComboBox List会是这样的:

AA
BB
CC
DD
......
......
XX
YY
ZZ
Others

我试过的代码:

public List<Testing> findAll() {
    Criteria criteria = getSession().createCriteria(Testing.class);
    criteria.addOrder(Order.asc("TestingString"));
    return (List<Testing>) criteria.list();
}

通过使用这种编码,“其他”将在“OO”和“PP”之间。显示选择“其他”是一种不好的方式。

2 个答案:

答案 0 :(得分:1)

使用Hibernate没有直接的方法,但你可以在你的代码中完全做到这一点。我想到了两种方式:

  1. 不要将其他人留在数据库中。从DB中检索已排序的列表,然后在Java代码中手动将Others添加到列表的最后一个列表中。
  2. 将其他人保留在DB中,按照正常情况检索所有内容,甚至不进行排序,然后调用Collections.sort(resultList,comparator),其中比较器是您的自定义比较器,在该比较器中,它按字母顺序比较字符串,但始终将Others作为最大值。这将返回您想要的列表。

答案 1 :(得分:0)

在休眠时,您可以定义一个@Formula注释字段,其中值是订单的SQL表示形式。然后在排序中使用@Formula注释字段。

表达式可能是

CASE columnName
   WHEN 'Other' THEN 'zzzzzzzzzzzzzz"
   ELSE columnName
END