Desidero scrivere un metodo che restituisca un elenco degli ultimi oggetti aggiunti raggruppati per campo "ID di servizio".Scrittura della clausola HQL utilizzando l'API di Hibernate Criteria
Di seguito HQL funziona, ma voglio scrivere questo utilizzando Criteri API:
FROM Notification WHERE date IN
(SELECT MAX(date) FROM Notification GROUP BY serviceId)
ORDER BY date ASC
Qualcosa di simile a questo:
Criteria crit = session.createCriteria(Notification.class);
crit.add(Restrictions.in("date", <MAX dates>));
criteria.addOrder(Order.desc("date"));
Grazie in anticipo.
EDIT:
Ora bisogno di una query simile che lavora utilizzando EclipseLink API =/
Fondamentalmente, ho bisogno dell'ultimo N righe (data max), che lo stato è uno dei cinque descritto più sotto, raggruppato per colonna serviceId.
A causa della mia inesperienza, era il meglio che potevo:
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");
La clausola per evitare duplicati serviceIds in righe di risultato che manca ...
Ma OP vuole che la sottoquery sia 'selezionare max (data) dal gruppo di notifica per serviceId', invece solo' selezionare max (data) da Notifica –
Errore, aggiornato. –
Funziona bene! Grazie. – elias