5
我想編寫一個方法,返回按字段'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"));
在此先感謝。
編輯:
現在我需要的是適用於使用的EclipseLink API =/
基本上類似的查詢,我所需要的最後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希望子查詢是'從通知組中選擇max(date)by serviceId',而不是'從通知中選擇max(日期)「 – 2012-03-07 01:23:41
我的錯誤已更新。 – 2012-03-07 02:12:01
工作正常!謝謝。 – elias 2012-03-07 15:04:09