2016-07-22 5 views
0

Je veux retourner une liste de cartes de mon createNativeQuery().getResultList(), où chaque carte est une paire valeur/clé représentant le nom de la colonne - valeur. J'ai déjà essayé d'utiliser directement dans la méthode comme ceci:Comment retourner la liste <Map <String, Object >> using Hibernate

public List<Map<String, Object>> execQuery(String nativeQuery) { 
    return entityManager().query(nativeQuery).getResultList(); 
} 

mais il retourne toujours la liste. Quelqu'un sait si ce que je veux est même possible?
L'implémentation JPA que j'utilise est Hibernate. J'utilise actuellement Java 8 (je ne sais pas si cette information est pertinente pour mon cas).
Toute aide est la bienvenue. Merci d'avance.

+1

-t STH comme ce travail pour vous? 'Requête q1 = entityManager(). Query (nativeQuery); org.hibernate.Query hibernateQuery = ((org.hibernate.jpa.HibernateQuery) q1) .getHibernateQuery(); hibernateQuery.setResultTransformer (AliasToEntityMapResultTransformer.INSTANCE); ' – Apostolos

+1

Vous ne pouvez pas utiliser une requête seule dans JPQL. Convertissez les résultats vous-même en ce dont vous avez besoin –

+0

@Apostolos Merci beaucoup, cela a résolu mon problème: D. Cela liera mon application à Hibernate mais ce n'est pas un problème en ce moment :). –

Répondre

1

S'il vous plaît essayer avec

Query q1 = entityManager().query(nativeQuery); 
org.hibernate.Query hibernateQuery =((org.hibernate.jpa.HibernateQuery)q1) .getHibernateQuery(); 
hibernateQuery.setResultTransformer(AliasToEntityMapResultTransformer.INSTANCE);‌​ 
1

Vous pouvez utiliser le ResultTransformer pour transformer vos résultats sous forme de carte. Following the oficial documentation

Comme ceci:

List<Map<String,Object>> mapaEntity = session 
 
    .createQuery("select e from Entity") 
 
    .setResultTransformer(new AliasToEntityMapResultTransformer()) 
 
    .list();

+0

Cela semble être une solution plus propre, mais dans mon application actuelle, je n'ai pas accès à 'org.hibernate.Session' :(, mais merci pour votre réponse :) –