使用本机查询从 Spring Data 返回自定义对象

新手上路,请多包涵

我的问题是基于 另一篇文章。如何使用本机查询实现相同的目的?本机查询不允许 JPQL,因此也不允许新实例。

我的波乔。

 class Coordinates {

    private final BigDecimal latitude
    private final BigDecimal longitude

    ...
}

我的数据库表包含城市周边的坐标,因此有三列:city_name、latitude、longitude。每个城市都包含很多(实际上,很多)周界坐标,这些坐标将用于在 Google 地图中构建阴影区域。

我打算在该表上构建一个简单的本机查询,该查询应返回一个坐标列表。

原文由 Sidney de Moraes 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 653
2 个回答

另一篇文章 中找到了答案。基本上我使用了 SqlResultSetMapping 以及 ConstructorResult (没有其他方法)特别注意对上述帖子的已接受答案的评论:你需要添加 @NamedNativeQuery 对所用实体的注释 interface 在实体名称前加上 . 工作。否则它不会工作

例子:

 @Entity
@Table(name = "grupo_setorial")
@SqlResultSetMapping(
        name = "mapeamentoDeQuadrantes",
        classes = {
                @ConstructorResult(
                        targetClass = Coordenada.class,
                        columns = {
                                @ColumnResult(name = "latitude"),
                                @ColumnResult(name = "longitude")
                        }
                )
        }
)
@NamedNativeQuery(
        name = "GrupoCensitario.obterPerimetroDosSetores",
        query = "SELECT latitude as latitude, longitude as longitude FROM coordenadas where id_setor IN (:setores)",
        resultSetMapping = "mapeamentoDeQuadrantes"
)
public class GrupoCensitario {

原文由 Sidney de Moraes 发布,翻译遵循 CC BY-SA 3.0 许可协议

这是 https://jira.spring.io/browse/DATAJPA-980 是一个演示该问题的项目。

 @Query(value = "SELECT name AS name, age AS age FROM Person", nativeQuery = true)
List<PersonSummary> findAllProjectedNativeQuery();

它在 Hibernate 5.2.11 附带的 Spring Data JPA 2.0 GA (Kay) 版本中得到修复。

Spring Data 1.10.12 (Ingalls) 和 1.11.8 (Hopper) 也修复了这个问题,但需要在 Hibernate 5.2.11 上运行才能工作。

原文由 ltsallas 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题