JPQL Auswählen des einen maximalen Zeile aus jeder Gruppe
Frage
Ich bin relativ neu in JPA, und ich möchte das folgende Problem mit JPQL ausschließlich lösen (man beachte, dass die Umsetzung ich verwende ist Datanucleus): Ich habe eine Tabelle von versioniert Einheiten, und ich möchte die neueste Version erhalten für alle Unternehmen in der Tabelle (dh ich eine Entity-Klasse haben, die eine ID hat (die eine Zeile eindeutig identifiziert, eine EntityID (die die Unternehmen selbst in ganz Versionen) und einen Zeitstempel identifiziert; ich möchte die neueste Version Einheit für alle erhalten EntityID) Mein aktueller Code lautet wie folgt:.
String innerQueryString = "SELECT entity.entityId, max(entity.timestamp) " +
"FROM Entity entity" +
"GROUP BY entity.entityId";
Query getQuery = getEntityManager().createQuery(innerQueryString);
List<Object[]> queryRes = getQuery.getResultList();
List<IEntity> ret = new ArrayList<IEntity>();
for (Object[] res : queryRes) {
ret.add(getEntity((Long)res[0], (Date)res[1]));
}
return ret;
Wo GetEntity die Elementdaten für den angegebenen EntityID bekommt, Zeitstempel. Ich habe mehrere Ressourcen gefunden, wie dieser Code in SQL funktionieren würde hier http://www.xaprb.com/blog/2006/12/07/how-to-select-the-firstleastmax-row-per-group-in- sQL / aber ich kann nicht gelingt, eine JPQL Version zu erstellen. Hilfe wird sehr geschätzt, danke.
Lösung
Wenn timestamp
s pro entityId
einzigartig sind, können Sie so etwas schreiben:
SELECT e FROM Entity e
WHERE e.timestamp = (SELECT MAX(ee.timestamp) FROM Entity ee WHERE ee.entityId = e.entityId)