Escriba la cláusula HQL con la API de criterios de Hibernate
Quiero escribir un método que devuelva una lista de los últimos objetos agregados agrupados por el campo 'serviceId'.
El siguiente HQL funciona, pero quiero escribir esto usando Criteria API:
FROM Notification WHERE date IN
(SELECT MAX(date) FROM Notification GROUP BY serviceId)
ORDER BY date ASC
Algo como esto
Criteria crit = session.createCriteria(Notification.class);
crit.add(Restrictions.in("date", <MAX dates>));
criteria.addOrder(Order.desc("date"));
Gracias por adelantado
EDITAR
Ahora necesito una consulta similar que funcione con eclipselink API = /
ásicamente, necesito las últimas N filas (fecha máxima), cuyo estado es uno de los cinco descritos a continuación, agrupados por la columna serviceId.
Debido a mi inexperiencia, fue lo mejor 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");
Falta la cláusula para evitar duplicados de ServiceIds en las filas de resultados ...