Как вернуть List‹Map‹String, Object›› с помощью Hibernate

Я хочу вернуть список карт из моего createNativeQuery().getResultList(), где каждая карта представляет собой пару ключ-значение, представляющую имя столбца-значение. Я уже пытался использовать прямой метод следующим образом:

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

но он всегда возвращает список. Кто-нибудь знает, возможно ли то, что я хочу?
Я использую реализацию JPA — Hibernate. В настоящее время я использую Java 8 (не знаю, актуальна ли эта информация для моего случая).
Приветствуется любая помощь. Заранее спасибо.


person Kim Aragon Escobar    schedule 22.07.2016    source источник
comment
это работает для вас? Query q1 = entityManager().query(nativeQuery); org.hibernate.Query hibernateQuery =((org.hibernate.jpa.HibernateQuery)q1) .getHibernateQuery(); hibernateQuery.setResultTransformer(AliasToEntityMapResultTransformer.INSTANCE);   -  person Apostolos    schedule 22.07.2016
comment
Вы не можете с одним запросом в JPQL. Конвертируйте результаты самостоятельно в то, что вам нужно   -  person    schedule 22.07.2016
comment
@Apostolos Большое спасибо, это решило мою проблему: D. Это привяжет мое приложение к Hibernate, но сейчас это не проблема :).   -  person Kim Aragon Escobar    schedule 22.07.2016
comment
позвольте мне опубликовать это как ответ, чтобы принять его :)   -  person Apostolos    schedule 22.07.2016
comment
@BillyFrost Да, я сам занимался преобразованием, пока не увидел ответ Апостолоса. Я не против привязать свое приложение к реализации JPA (в данном случае гибернации).   -  person Kim Aragon Escobar    schedule 22.07.2016
comment
иногда я также стараюсь не делать вещи, специфичные для jpa-implementation-library, но каковы шансы изменить библиотеку? поэтому вместо того, чтобы пытаться найти универсальное решение JPA, в некоторых частях кода я предпочитаю также использовать части, специфичные для спящего режима.   -  person Apostolos    schedule 22.07.2016


Ответы (2)


Пожалуйста, попробуйте с

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

Вы можете использовать ResultTransformer для преобразования ваших результатов в форму карты. Согласно официальной документации

Как это:

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

person tiagoribeirof    schedule 22.07.2016
comment
Это кажется более чистым решением, но в моем текущем приложении у меня нет доступа к org.hibernate.Session :(, но спасибо за ответ :) - person Kim Aragon Escobar; 25.07.2016