2012-06-18 5 views
1

J'ai une table et Java entité avec ces attributs:JPQL: obtenez les articles les plus récents

Avis

-Id

-scope

-Activity

-user

-creat ionTime

-readTime (null -> nouveau message)

Comment puis-je obtenir les dernières notifications par champ et l'activité avec une instruction JPQL? Depuis JPA (Version 1.0, aucune API Criteria disponible) n'a pas de support pour "SELECT TOP" ou l'opérateur LIMIT dans l'instruction (uniquement sur Entity Manager (em.setmax ...)) Je ne trouve pas de solution ... il existe un moyen de faire cette tâche avec une seule déclaration JPQL? Utilisez natif SQL pour obtenir LIMIT ou TOP est pas de solution ...

Exemple:

Notification 1 
-Id:1 
-scope:test 
-activity:1 
-user:user1 
-cTime: 01.01.1999 

Notification 2 
-Id:2 
-scope:test 
-activity:1 
-user:user1 
-cTime: 02.02.2000 


Notification 3 
-Id:3 
-scope:dev 
-activity:2 
-user:user1 
-cTime: 01.01.1997 

Cela devrait retrun: Notification 2 et 3

Répondre

0

Vous pouvez la requête ci-dessous, peut modifier l'ordre des le champ en conséquence.

//-- MAX_RESULT_SIZE is the number of results to be fetched 
entityManager.createQuery("SELECT n.scope, n.activity, MAX(n.Id) FROM Notification n GROUP BY n.scope, n.activity ORDER BY n.cTime DESC").setMaxResults(MAX_RESULT_SIZE); 

Pour récupérer résultat de cette requête, qui sera tableau d'objets, reportez-vous here.

+0

Désolé, cela ne rés'te pas le problème ... Examinez l'exemple. Vous devez regrouper les unités et ensuite obtenir l'article le plus récent pour chaque groupe ... – mischu

+0

@mischu Référez la réponse mise à jour. –

+0

Je pense que ce n'est pas la solution. Grouper l'id n'a aucun sens ... En outre, j'ai besoin des énités de l'em et non "n.scope, n.activity, n.Id" .... – mischu

Questions connexes