2015-08-28 69 views
0

我现在面临着一个有关排序结果从DB获得问题冬眠。 我想按ASC排序,但我想要例外,“其他”。所以选择“其他”将是最后的选择。我怎样才能实现这个? 所以,框列表会喜欢这样的:排序,同时用特殊安排

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” 之间。显示选择“其他”是一种不好的方式。

回答

1

与Hibernate没有直接的方法,但你完全可以这样做,在你的代码。我想到了2种方法:

  1. 不要让其他人留在数据库中。从数据库中检索排序后的列表,然后在您的java代码中手动添加Others到最后一个列表。
  2. 让别人在DB,检索所有按正常,甚至没有排序,然后的调用Collections.sort(resultList,比较器),其中比较是您自定义的比较中,它比较字符串的字母顺序,但总把他人作为最大的价值。这将返回你想要的列表。
+0

我也跟着你的第一个解决方案,它的伟大工程,太感谢你了, – Jbisgood9999999

0

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

的表达可能是

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