【问题标题】:How to return List<Map<String, Object>> using Hibernate如何使用 Hibernate 返回 List<Map<String, Object>>
【发布时间】:2016-11-26 18:33:17
【问题描述】:

我想从我的createNativeQuery().getResultList() 返回一个映射列表,其中每个映射是一对键-值表示列名-值。我已经尝试在这样的方法中使用直接:

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

但它总是返回列表。有人知道我想要的是否可能?
我使用的 JPA 实现是 Hibernate。我目前正在使用 Java 8(不知道此信息是否与我的情况相关)。
欢迎任何帮助。 提前致谢。

【问题讨论】:

  • 这样的东西适合你吗? Query q1 = entityManager().query(nativeQuery); org.hibernate.Query hibernateQuery =((org.hibernate.jpa.HibernateQuery)q1) .getHibernateQuery(); hibernateQuery.setResultTransformer(AliasToEntityMapResultTransformer.INSTANCE);
  • 您不能在 JPQL 中单独使用查询。自己将结果转换为您需要的结果
  • @Apostolos 非常感谢,这解决了我的问题:D。这会将我的应用程序绑定到 Hibernate,但现在这不是问题 :)。
  • 让我把它发布为接受它的答案:)
  • 有时我也尽量不做 jpa-implementation-library-specific 的东西,但是改变库的机会是什么?因此,与其努力寻找 JPA 通用的解决方案,我更喜欢在代码的某些部分中使用特定于休眠的部分。

标签: java hibernate hibernate-native-query


【解决方案1】:

您可以使用 ResultTransformer 将结果转换为地图形式。 Following the oficial documentation

像这样:

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

【讨论】:

  • 这似乎是一个更清洁的解决方案,但在我当前的应用程序中,我无法访问org.hibernate.Session :(,但感谢您的回答:)
【解决方案2】:

请尝试

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-22
    • 1970-01-01
    • 2012-03-06
    • 1970-01-01
    • 1970-01-01
    • 2020-08-01
    • 1970-01-01
    • 2021-04-29
    相关资源
    最近更新 更多