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.

War es hilfreich?

Lösung

Wenn timestamps 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)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top