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

2022-09-03 05:10:54

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

我的POJO。

class Coordinates {

    private final BigDecimal latitude
    private final BigDecimal longitude

    ...
}

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

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


答案 1

在另一篇文章中找到了答案。基本上,我使用(没有其他方法解决)并特别注意对所提及帖子的可接受答案的评论:您需要将注释添加到所用实体的实体中,并在实体名称前面附加一个,否则它将不起作用。SqlResultSetMappingConstructorResult@NamedNativeQueryinterface.

例:

@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 {

答案 2

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

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

它在Spring Data JPA 2.0 GA(Kay)版本中得到了修复,该版本随Hibernate 5.2.11一起提供。

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


推荐