Je suis relativement nouveau à JPA et je voudrais résoudre le problème suivant en utilisant exclusivement jpql (notez que l'implémentation que j'utilise est Datanucleus): J'ai un tableau d'entités versionnées, et je voudrais obtenir la dernière version pour toutes les entités de la table (ie j'ai une classe d'entité qui a un identifiant (qui identifie uniquement une ligne, un entityId (qui identifie l'entité elle-même dans toutes les versions) et un horodatage; comme pour obtenir la dernière entité version pour tous entityID) Mon code actuel se présente comme suit:..Jpql sélectionnant la rangée maximum de chaque groupe
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;
Où getEntity obtient les données d'entité pour l'entityID spécifiée, timestamp j'ai trouvé plusieurs ressources sur la façon dont ce c ode fonctionnerait en sql ici http://www.xaprb.com/blog/2006/12/07/how-to-select-the-firstleastmax-row-per-group-in-sql/ mais je n'arrive pas à en créer une version jpql. L'aide sera grandement appréciée, merci.
Non, je ne peux pas être sûr qu'ils sont uniques –
@Rares: Je voulais dire 'entityId'. – axtavt
EntityId n'est pas non plus unique. Il est utilisé pour identifier une entité indépendamment de sa version (ie 2 entrées avec des horodatages différents, mais la même entityId correspond à la même entité, donc je suis capable de basculer entre les versions de la même entité) –