2017-04-15 1 views
0

QueryDSL에서 추가 매개 변수를 사용하여 컬렉션 크기별로 정렬 할 수 있습니까? 예를 들어
, 그것은 다음 SQL 생성했을 경우에 수집 크기 OrderSpecifier<Integer> severity = alarmSet.alarms.size().desc();로 난 그냥 순서 : 불가능처럼쿼리 dsl 컬렉션 크기 (param 포함)

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

가 보이는 :

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에 조건을 추가하고 다음 생성 할을 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");