'serviceId'필드로 그룹화 된 마지막으로 추가 된 개체의 목록을 반환하는 메서드를 작성하고 싶습니다.Hibernate Criteria API를 사용한 HQL 절 쓰기
다음 HQL 작동하지만, 나는이 사용 기준 API 작성하려는이 같은
FROM Notification WHERE date IN
(SELECT MAX(date) FROM Notification GROUP BY serviceId)
ORDER BY date ASC
뭔가 : 사전에
Criteria crit = session.createCriteria(Notification.class);
crit.add(Restrictions.in("date", <MAX dates>));
criteria.addOrder(Order.desc("date"));
감사합니다.
는 편집 :
지금 내가 다섯 중 하나가 우는 소리를 설명 상태 마지막 N 행 (최대 날짜), 필요, 기본적으로는 EclipseLink의 API =/
을 사용하여 작동 유사한 질의를 필요로한다 serviceId 열로 그룹화됩니다. 때문에 내 경험 부족에
, 그것은 내가 할 수있는 최선이었다
ExpressionBuilder builder = new ExpressionBuilder();
Expression exStatus1 = builder.get("status").equal(MessageType.START.toString());
Expression exStatus2 = builder.get("status").equal(MessageType.RUNNING.toString());
Expression exStatus3 = builder.get("status").equal(MessageType.PAUSED.toString());
Expression exStatus4 = builder.get("status").equal(MessageType.END_ERROR.toString());
Expression exStatus5 = builder.get("status").equal(MessageType.END_SUCCESS.toString());
ReadAllQuery query = new ReadAllQuery();
query.setReferenceClass(Notification.class);
query.setSelectionCriteria(((exStatus1).or(exStatus2).or(exStatus3).or(exStatus4).or(exStatus5)));
query.setMaxRows(listSize);
query.addDescendingOrdering("date");
없는 결과 행에 중복 serviceIds을 피할 수있는 절 ... 당신은 기준 예측을 사용하려는거야
하지만 OP는 서브 쿼리가'serviceId'의 알림 그룹에서 최대 선택 (날짜 선택) '대신에 단지'알림에서 최대 (날짜 선택) ' –
내 실수를 업데이트했습니다. –
잘 작동합니다! 감사. – elias