Отобразить поле сущности для выбора именованного запроса - PullRequest
0 голосов
/ 30 октября 2018

Моя сущность содержит географическое местоположение. В моем хранилище я делаю пользовательский запрос, чтобы получить все сообщения в определенном радиусе заданного местоположения. Расстояние от курса зависит от каждого запроса в зависимости от заданной точки. Поэтому я не хочу упорствовать на расстоянии. Мне нужно рассчитать расстояние в моем запросе. Я хочу добавить это расчетное расстояние к моей сущности. Кто-нибудь знает, как я могу сопоставить что-то из моего набора результатов в поле сущности, не пропуская это. Я знаю, что есть аннотация @Forumla для некоторых простых вещей, но это не помогает мне.

Запрос:

@Query(name = "MessageWithDistance",value = "SELECT m.*,cast(st_distance_sphere(m.location,:userLocation) as double precision) as distance FROM message_entity AS m WHERE st_within(m.location, :polygon)=TRUE",nativeQuery = true)
    List<MessageEntity> findWithin(@Param("userLocation") Point point, @Param("polygon") Polygon polygon);



@Entity
public class MessageEntity {

    @Id
    @GeneratedValue(strategy= GenerationType.IDENTITY,generator = "message_seq_gen")
    @SequenceGenerator(name = "message_seq_gen", sequenceName = "message_id_seq")
    private Long id;
    private LocalDateTime dateTime;

    @Column(name = "location",columnDefinition = "GEOMETRY(Point, 4326)")
    @Type(type = "jts_geometry")
    private Point location;

    private String message;

    @Transient
    private Double distance;

1 Ответ

0 голосов
/ 31 октября 2018

Используйте spring-data-jpa projection , чтобы получить желаемое:

// define the dto interface
public interface MessageEntityDto {
           Long getId();
  LocalDateTime getDateTime();
          Point getLocation();
         String getMessage();
         Double getDistance();
}

@Query(value = "SELECT m.*, ... as distance FROM message_entity AS m ..., nativeQuery = true)
List<MessageEntityDto> findWithin(...);
...