使用Native Query从Spring Data返回自定义对象
我的问题是基于另一篇文章 。 如何使用本机查询实现相同的function? 本机查询不允许JPQL因此也不允许新实例。
我的POJO。
class Coordinates { private final BigDecimal latitude private final BigDecimal longitude ... }
我的数据库表包含城市周长的坐标,因此有三列:city_name,纬度,经度。 每个城市都包含很多(实际上很多)周边坐标,用于在Google地图中构建阴影区域。
我打算在该表上构建一个简单的本机查询,该查询应该返回一个坐标列表。
在另一篇文章中找到答案。 基本上我使用SqlResultSetMapping
和ConstructorResult
(没有其他方法解决),特别注意对上述post的接受答案的评论:你需要将@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 {
您将不得不使用作为JPA一部分的sql结果集映射 。
这是https://jira.spring.io/browse/DATAJPA-980 , 这是一个演示该问题的项目。
@Query(value = "SELECT name AS name, age AS age FROM Person", nativeQuery = true) List 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上运行才能工作。
如果您使用的是最新版本的spring-data
并且还使用了Repositories
,我个人认为来自Itsallas的答案可以找到正确的解决方案。
我实际上现在还没有关于(Spring Data) Projections
,并且需要一点时间来理解他在他的例子中展示的内容。
因此,我只想添加一个指向Spring Data JPA - Reference Documentation
的链接Spring Data JPA - Reference Documentation
,看一下Projections章节 。
Spring Data查询方法通常返回由存储库管理的聚合根的一个或多个实例。 但是,有时可能需要根据这些类型的某些属性创建投影。 Spring Data允许建模专用返回类型,以更有选择地检索托管聚合的部分视图。