Write cláusula HQL usando a API Hibernate Criteria

Eu quero escrever um método que retorne uma lista dos últimos objetos adicionados, agrupados por campo 'serviceId'

O seguinte HQL funciona, mas quero escrever isso usando a API de critérios:

FROM Notification WHERE date IN 
    (SELECT MAX(date) FROM Notification GROUP BY serviceId) 
ORDER BY date ASC

Algo assim

Criteria crit = session.createCriteria(Notification.class);
crit.add(Restrictions.in("date", <MAX dates>));
criteria.addOrder(Order.desc("date"));

Desde já, obrigado

EDITAR

Agora preciso de uma consulta semelhante que funcione usando a API eclipselink = /
Basicamente, preciso das últimas N linhas (data máxima), cujo status é um dos cinco descritos abaixo, agrupados por coluna serviceI
Devido à minha inexperiência, foi o melhor que pude:

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");

A cláusula para evitar duplicatas serviceIds nas linhas de resultado está ausente ...

questionAnswers(2)

yourAnswerToTheQuestion