24 votes

Comment obtenir les valeurs SELECT et COUNT avec JPA GROUP BY ?

Si mon entité est obtenue en tant que Man, elle a les propriétés name, id, avec JPA comment puis-je obtenir le résultat comme cette requête,

entityManager.createQuery("SELECT m.name AS name, COUNT(m) AS total FROM Man AS m GROUP BY m.name ORDER BY m.name ASC");

Y a-t-il un moyen d'utiliser org.springframework.jdbc.core.RowMapper avec JPA ?

55voto

Vivien Barousse Points 11435

Lorsque vous exécutez cette requête, au lieu d'obtenir directement une liste d'objets comme d'habitude, vous récupérez une liste de Object[] .

Pour chaque tableau que vous récupérez, le premier élément sera le nom de la ligne, le second le nombre.

Je ne pense pas que vous puissiez utiliser un RowMapper avec JPA. RowMapper vient de Spring, qui n'est pas le même framework que JPA. Peut-être que certaines implémentations de JPA le permettent, mais je ne pense pas qu'il soit judicieux de le faire.

Editer - Exemple de code :

List<Object[]> results = entityManager
        .createQuery("SELECT m.name AS name, COUNT(m) AS total FROM Man AS m GROUP BY m.name ORDER BY m.name ASC");
        .getResultList();
for (Object[] result : results) {
    String name = (String) result[0];
    int count = ((Number) result[1]).intValue();
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X