5

非常に複雑になるクエリがあり、管理しやすくするために Criteria API に切り替えたいと考えています。基本的に、フィルターに一致するデータをいくつか選択しますが、一致したフィルターの数に基づいて結果セットを並べ替えます。これを行うには、一致するフィルターの数を追跡するフィールドを select 句に追加します。

例が役に立ちます:

http://sqlfiddle.com/#!4/90e02/2

Hibernate Criteria API を使用してこれを行う方法はありますか。私たちの目標は、これが維持しなければならない大きな HQL 文字列を作成するコードにならないようにすることです。

答えとして必ずしも例は必要ありませんが (それは素晴らしいことですが!)、はい/いいえと、それがどのように行われるかを示す何かが機能します。

4

3 に答える 3

2

はい、できます。以下は、 SQL CASE式を作成するための APIです。

そして、これを行うための擬似コードを次に示します。

CriteriaBuilder cb = ...
javax.persistence.criteria.Expression rankExpression = 
        cb.sum(
              cb.selectCase().when(first_name = 'Carter',1).otherwise(0),
              cb.sum(cb.selectCase().when(last_name = 'Mason',1).otherwise(0),
                     cb.sum(...)
                     )
              );
于 2013-11-05T22:49:11.130 に答える
0

これを実現する別の方法を見つけました:

http://blog.tremend.ro/2008/06/10/how-to-order-by-a-custom-sql-formulaexpression-when-using-hibernate-criteria-api/

于 2013-11-26T16:53:49.440 に答える