【问题标题】:Mapping JPA Entity with result of native query将 JPA 实体与本机查询的结果进行映射
【发布时间】:2020-06-01 09:28:03
【问题描述】:

我正在使用 Spring Data JPA 来映射实体和表。

在我的 PostgreSQL 数据库中,我有一个名为 declare_location 的表,它存储带长和纬度的位置。我编写了一个带有 postgre 特定语法的 sql 本机查询,以检索已声明位置的列表,按到给定点的相对距离排序:

  @Query(value="select *, 1.60934 * (point (:longRef, :latRef) <@> point (longitude, latitude)) as distance from declared_location order by distance", nativeQuery = true)
    List<DeclaredLocation> findAllSortedByDistance(@Param("longRef") double longRef, @Param("latRef") double latRef);

我想将 Postgre 计算的距离(列“距离”)映射到我实体的一个字段。这就是我卡住的地方。这是我的实体:

@Entity
public class DeclaredLocation {

    @Id
    @Type(type = "uuid-char")
    @GeneratedValue(strategy = GenerationType.AUTO)
    private UUID id;

    private double latitude;

    private double longitude;

    private String address;

    @Column
    private Double relativeDistanceKm;

(...)
}

我应该如何告诉 Spring Data JPA 将 postgre 作为本机查询结果创建的列 distance 映射到实体的字段 relativeDistanceKm?这样做的正确方法是什么?

【问题讨论】:

    标签: postgresql hibernate spring-data-jpa nativequery


    【解决方案1】:

    您可以为此使用休眠@Formula

    @Entity
    public class DeclaredLocation {
       // ...
    
       @Formula(value = "1.60934 * (point (13,52) <@> point (longitude, latitude))")
       private Double relativeDistanceKm;
    }
    

    【讨论】:

    • 谢谢,但实际上我不想计算距固定点的距离,而是想将变化参考点的经纬度作为查询参数传递。 (见我上面的编辑)。我在最初的帖子中没有提到它,以避免使我的问题过于复杂。在这种情况下,我不确定@Formula 是否有用。
    猜你喜欢
    • 2019-07-25
    • 1970-01-01
    • 2014-06-25
    • 2015-05-18
    • 1970-01-01
    • 1970-01-01
    • 2017-05-13
    • 1970-01-01
    • 2013-01-22
    相关资源
    最近更新 更多