Сопоставление сущности JPA с результатом собственного запроса - PullRequest
2 голосов
/ 17 февраля 2020

Я использую Spring Data JPA для отображения сущностей и таблиц.

В моей PostgreSQL БД у меня есть таблица Decla_Location, в которой хранятся местоположения с long и lat. Я написал sql собственный запрос с синтаксисом postgre конкретный c, чтобы получить список объявляемых объектов, упорядоченный по относительному расстоянию до заданной точки:

  @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 сопоставить столбец distance, созданный postgre в результате собственного запроса, с полем relativeDistanceKm сущности? Какой правильный подход для этого?

1 Ответ

2 голосов
/ 17 февраля 2020

Вы можете использовать hibernate @ Formula для этой цели.

@Entity
public class DeclaredLocation {
   // ...

   @Formula(value = "1.60934 * (point (13,52) <@> point (longitude, latitude))")
   private Double relativeDistanceKm;
}
...