フィールド '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"));
感謝。
EDIT:
今、私は基本的にのEclipseLink API =/
を使用して動作する同様のクエリを必要とする、私は、ステータスが5説明怒鳴るの一つであり、最後のN行(最大日付)、必要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