【问题标题】:How to get the select result as List<Map<String, Object>> in Spring Boot 2.0如何在 Spring Boot 2.0 中将选择结果作为 List<Map<String, Object>>
【发布时间】:2019-08-14 11:11:16
【问题描述】:

我们正在尝试从 Spring boot 1.5.x 迁移到 2.0.x

以下是使用 Spring boot 1.5.x 获取选择结果为 List> 的代码:

public List<Map<String, Object>> findZipCodeAndCityByState(String state) {
    String sql = "SELECT DISTINCT z.city, z.zip_code FROM zip_code z WHERE z.state = :state";
    Query qr = entityManager.createNativeQuery(sql);
    qr.setParameter("state", state);

    // BELOW LINES WILL GIVE US THE MAP OF PROPERTIES
    org.hibernate.Query hibernateQuery = ((org.hibernate.jpa.HibernateQuery) qr).getHibernateQuery();
    hibernateQuery.setResultTransformer(AliasToEntityOrderedMapResultTransformer.INSTANCE);

    return qr.getResultList();
}

但是当我们尝试迁移到 2.0.x 时,发现 org.hibernate.Query 和 hibernateQuery.setResultTransformer() 都已被弃用。

在 Spring Boot 2.0 中如何获取列表选择结果?

【问题讨论】:

    标签: hibernate spring-boot spring-data-jpa


    【解决方案1】:

    您有以下选择:

    1. 继续使用 Hibernate 中的 ResultSetTransformer。虽然如果 JPA 规范中存在相当等效的功能,Hibernate 的一些特性已被弃用,但当使用 Hibernate API 为您提供更多 JPA 功能时,您可以轻松找到很多地方。我建议您在 Query 上调用 unwrap 而不是强制转换

    2. 请改用List&lt;Tuple&gt;。要使用Tuple,您需要使用createNativeQuery 的重载版本,将Tuple.class 作为结果类传递

    3. 使用 DTO 投影

    一篇总结所有 3 种方法的好文章: The best way to map a projection query to a DTO (Data Transfer Object) with JPA and Hibernate

    【讨论】:

      猜你喜欢
      • 2020-07-14
      • 2018-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-22
      • 2015-11-21
      • 2018-11-23
      相关资源
      最近更新 更多