2017-07-06 1 views
1

J'ai cette requête dans JPA:Quel est le type de retour pour la méthode de requête JPA lorsque le résultat de la requête n'est pas une classe?

@Query("SELECT programId,COUNT(id) FROM Therapy GROUP BY programId ORDER BY COUNT(id) DESC") 
List<Object> top10ProgramsOfTherapies(); 

Il fonctionne très bien, mais il renvoie une liste d'objets, et je ne peux pas obtenir les données hors de lui. Quel type de retour dois-je utiliser pour lire les données de résultat?

+1

chaque objet sera effectivement un objet [] –

+0

@ScaryWombat Vous êtes à droite, mais c'est plutôt * chaque objet est un 'Object []' *., car * chaque 'Object' sera en fait un' Object [] '* est un peu déroutant, n'est-ce pas !? ;) –

Répondre

1

Cette requête renvoie une liste d'objets tableau: Object[] si vous avez besoin de changer votre code comme ceci:

@Query("SELECT programId,COUNT(id) FROM Therapy GROUP BY programId ORDER BY COUNT(id) DESC") 
List<Object[]> top10ProgramsOfTherapies(); 

Et pour chaque item dans la liste: item[0] tiendra la valeur programID et item[1] tiendra la valeur COUNT(id), et vous devez les convertir en leurs types respectifs car ils seront juste object s.

+0

Merci, cela a fonctionné parfaitement. La méthode renvoie en effet une liste de tableaux d'objets, mais les objets du tableau sont en réalité des Longs. –

+0

@MarkBuikema Oui, ils sont 'Long's, mais il est plus sûr d'utiliser la distribution, je pense. –

2

Vous pouvez également créer une classe DTO, par exemple, TherapyDto qui aura un constructeur avec 2 paramètres et de l'utiliser de cette façon:

@Query("SELECT new com.my.TherapyDto(programId,COUNT(id)) FROM Therapy GROUP BY programId ORDER BY COUNT(id) DESC") 
List<TherapyDto> top10ProgramsOfTherapies(); 
+0

Cela fonctionne aussi, mais je pense que la réponse de chsdk est plus agréable –