Написать предложение HQL с помощью Hibernate Criteria API

Я хочу написать метод, который возвращает список последних добавленных объектов, сгруппированных по полю «serviceId».

Следующий HQL работает, но я хочу напишите это, используя Criteria 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:

Теперь мне нужен аналогичный запрос, который работает с использованием API eclipselink =/
По сути, мне нужны последние 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");

Отсутствует пункт, чтобы избежать дублирования идентификаторов сервисов в строках результатов...

5
задан elias 5 April 2012 в 14:38
поделиться