2010-06-24 7 views
1

J'ai une table avec la structure suivante:mise en veille prolongée hql getMaxVersion

reportId
Version
Titre
.....

Je veux utiliser HQL pour aller chercher la dernière version de la rapport par id. La requête suivante fonctionnerait-elle?

from Report where reportId = :reportId and version = (select max(version) from Report where reportId = :reportId) 

Est-il possible de récupérer la ligne avec la version maximale sans l'aide d'un sous-sélection? Est-ce que le sous-select ci-dessus est même légal en Hibernate HQL?

Répondre

0

Essayez cette requête:

from Report where reportId = :reportId order by version desc 

avec setMaxResults = 1

+0

Cela couvre 99% des cas d'utilisation, mais si je veux récupérer une liste de titres pour tous les rapports? Par exemple, un menu déroulant avec les titres de TOUS les rapports qui peuvent être produits par le système .... – David

+0

SELECT reportId, title, max (version) FROM rapport GROUP BY reportId. Mais vous devez utiliser des projections dans ce cas. – uthark

0

Vous pouvez trier par version et utiliser setMaxResults dans la requête (définissez-le sur 1). Comme pour l'autre question, les sous-sélections comme celles-ci sont légales dans hql.

Questions connexes