77 votes

Une requête JPA peut-elle renvoyer des résultats sous forme de carte Java ?

Nous construisons actuellement un Map manuellement sur la base des deux champs qui sont renvoyés par une requête JPA nommée car JPA 2.1 ne fournit qu'une méthode getResultList()

 @NamedQuery{name="myQuery",query="select c.name, c.number from Client c"}

HashMap<Long,String> myMap = new HashMap<Long,String>();

for(Client c: em.createNamedQuery("myQuery").getResultList() ){
     myMap.put(c.getNumber, c.getName);
}

Mais, j'ai l'impression qu'un mappeur personnalisé ou similaire serait plus performant car cette liste pourrait facilement contenir plus de 30 000 résultats.

Toutes les idées pour créer une carte sans itérer manuellement.

(J'utilise OpenJPA, pas l'hibernation)

7voto

krishna Murari Points 41

Cela fonctionne bien. Code du référentiel :

 @Repository
public interface BookRepository extends CrudRepository<Book,Id> {

    @Query("SELECT b.name, b.author from Book b")
    List<Object[]> findBooks();
}

service.java

       List<Object[]> list = bookRepository.findBooks();
                for (Object[] ob : list){
                    String key = (String)ob[0];
                    String value = (String)ob[1];
}

lien https://codereview.stackexchange.com/questions/1409/jpa-query-to-return-a-map

4voto

Tufik Chediak Points 31
Map<String,Object> map = null;
    try {
        EntityManager entityManager = getEntityManager();
        Query query = entityManager.createNativeQuery(sql);
            query.setHint(QueryHints.RESULT_TYPE, ResultType.Map);
        map = (Map<String,Object>) query.getSingleResult();
    }catch (Exception e){ }

 List<Map<String,Object>> list = null;
    try {
        EntityManager entityManager = getEntityManager();
        Query query = entityManager.createNativeQuery(sql);
            query.setHint(QueryHints.RESULT_TYPE, ResultType.Map);
            list = query.getResultList();
    }catch (Exception e){  }

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