2011-12-20 11 views
2

フィールドを任意にソートする最良の方法は何ですか?Hibernate、Criteria API、Enumフィールドを任意にソート

例:

ContentStatusを持っています。 Statusidは列挙型です。ビジネスはContentのリストをStatus.Id.REJECTEDStatus.Id.IN_WORK、次にStatus.Id.PENDINGの順にソートしたいと考えています。

ご覧のとおり、アルファベット順に並べ替えられていません。誰かが自分の考えを変えて、それを別の方法で並べ替えたい、あるいはもっとステータスを入れたいと思うかもしれません。

この状況を処理する最善の方法は何ですか?私が思いつくことができる唯一の解決策は、orderStatusに追加するか、それぞれStatusを別々にクエリし、それをプログラム的につなぎ合わせることです。しかし、それは汚れているようです。

私はこの前提でいくつかの継承不合理があることを理解しますが、それは私のものではなく、私はそれを支配しません。どんな助けでも大歓迎です。

答えて

2

最後に、intstatus.orderを追加して、その列でステータスを注文するのが最もクリーンな方法を見つけました。

  • データ層
  • に発注の背後にあるビジネス上の理由を心配していません
  • クリーナーコード順序を上変更する機能のみクライテリアAPIを使用する能力を:これは私を提供しましたデータベース内の値を変更することで即座に実行できます。

最終的な点は、ビジネス側が要件を不完全に考えるという習慣があり、開発中と発売後に何度も変更する必要があるためです。

1

ordinalを使用できます。しかし、あなたが言ったように、それは時間とともに変化するかもしれません。

次に、クエリを変更して、DBにそれをさせることができます。 HQLまたはSQLで簡単に実行できます。

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

いずれにせよ、注文を変更するにはコードをタップする必要があります。

+0

「注文」列の外では、コードを変更して再デプロイする必要があります。 HQLでこれを効果的に行うためのリンク/リファレンスはありますか? –

+0

私はHQLがケースをサポートしていると思います。簡単なクエリを試してみてください。 – ssedano

関連する問題