2017-04-15 5 views
0

QueryDSLで追加のパラメータを指定してコレクションサイズで注文することはできますか?クエリdslコレクションサイズによるパラメータの設定

ORDER BY (SELECT 
     COUNT(alarms.AL_ALARM_SET_ID) 
    FROM 
     ALARM alarms 
    WHERE 
     alarmset.ID = alarms.AL_ALARM_SET_ID) DESC 

しかし、私はそれがWHERE AND alarms.AL_STATUS = 1に条件を追加し、次を生成します:それは不可能だよう

ORDER BY (SELECT 
      COUNT(alarms.AL_ALARM_SET_ID) 
     FROM 
      ALARM alarms 
     WHERE 
      alarmsets.ID = alarms.AL_ALARM_SET_ID 
      AND alarms.AL_STATUS = 1) DESC 

答えて

0

が見える私は、コレクションのサイズOrderSpecifier<Integer> severity = alarmSet.alarms.size().desc();でわずか順序は、それが次のSQLを生成します。例えば
、 QueryDslでこの種の仕事をする(が可能ならば、は解決策を提供してください!)。 しかし、私は他の方法を見つけました - この列でアラームと注文の数を含むカスタム列を追加してください。

OrderSpecifier<Long> severity = new OrderSpecifier<>(Order.DESC, Expressions.numberPath(Long.class, "customCount")); 

とデータを選択するために、タプルを使用して::

query.select(Projections.tuple(room, countExpression)).fetch(); 
カスタム列によってその注文後

//crete subquery to count the size of child collection 
Expression<Long> countExpression = ExpressionUtils.as(JPAExpressions 
        .select(ExpressionUtils.count(alarm)) 
        .from(alarmSet.alarms, alarm) 
        .where(alarm.alStatus.eq(1)), "customCount"); 

関連する問題