【问题标题】:Hibernate, Criteria API, Sorting Enum Field ArbitrarilyHibernate,Criteria API,任意排序枚举字段
【发布时间】:2011-12-20 14:45:52
【问题描述】:

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

例子:

每个Content 都有一个StatusStatusid 是一个枚举。企业希望看到按Status.Id.REJECTEDStatus.Id.IN_WORKStatus.Id.PENDING 排序的Content 列表。

如您所见,它没有按字母顺序排序。并且有人可能会改变主意并希望它以不同的方式排序或投入更多的状态。

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

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

【问题讨论】:

    标签: hibernate hibernate-criteria


    【解决方案1】:

    最后我发现最干净的方法是添加一个intstatus.order,然后按该列排序状态。这为我提供了:

    • 仅使用 Criteria API 的能力
    • 更简洁的代码,无需担心数据层排序背后的业务原因
    • 能够通过更改数据库中的值即时更改排序。

    最后一点对我来说是真正的卖家,因为业务方面有一个习惯,即不完整地考虑他们的需求,并且需要在开发过程中和发布后多次更改它们。

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

      • 在“订单”列之外,我预计必须更改代码并重新部署。有关如何使用 HQL 有效执行此操作的任何链接/参考?
      • 我认为 HQL 支持大小写。尝试一个简单的查询。
      猜你喜欢
      • 2015-01-17
      • 1970-01-01
      • 2016-07-01
      • 2013-07-24
      • 2013-07-10
      • 2012-03-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多