Hibernate,Criteria API,任意排序枚举字段

时间:2011-12-20 14:45:53

标签: hibernate hibernate-criteria

对字段进行任意排序的最佳方法是什么?

示例:

每个Content都有一个StatusStatus' id是一个枚举。商家希望看到按ContentStatus.Id.REJECTEDStatus.Id.IN_WORK排序的Status.Id.PENDING列表。

正如您所看到的,它没有按字母顺序排序。有人可能会改变主意,希望以不同的方式排序,或者提出更多的状态'英寸

处理这种情况的最佳方法是什么?我能想出的唯一解决方案是将order添加到Status或单独查询每个Status,然后以编程方式将其拼接在一起。但那似乎很脏。

我知道这个前提有一些继承荒谬,但它不是我的,我无法控制它。非常感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

最后,我找到了最简洁的方法来添加int status.order,然后按该列排序状态。这为我提供了:

  • 仅使用Criteria API的能力
  • 清洁代码,不担心数据层排序背后的商业原因
  • 通过更改数据库中的值来即时更改排序的功能。

最后一点最终成为真正的卖家,因为业务方习惯于不完全考虑他们的要求,并且需要在开发期间和发布后多次更改它们。

答案 1 :(得分:1)

您可以使用ordinal。但正如你所说,它可能会随着时间而改变。

然后您可以更改查询,让DB执行此操作。使用HQLSQL更容易。

select 
    case 
       when a.FIELD = 'something' 
       then 1 
       else 0 
    end as myOrdr 
from A a 
order by myOrdr

无论哪种方式,您都必须触摸代码才能更改顺序。