簡體   English   中英

如何將 JpaQuery 的結果映射到自定義 DTO?

[英]How to map the result of a JpaQuery to a custom DTO?

我有一個 Hotspot 實體類和以下查詢,它應該返回一個 NearHotspot 對象列表:

Query("SELECT h, SQRT(POW(69.1 * (h.latitude - :geo_lat), 2) + POW(69.1 * (:geo_long - h.longitude) * COS(h.latitude / 57.3), 2)) AS distance FROM Hotspot h ORDER BY distance")
    List<NearHotspot> findClosestHotspots(@Param("geo_long") Double geo_long, @Param("geo_lat") Double geo_lat);

NearHotspot 對象具有 Hotspot 對象的所有字段和一個 Double 類型的距離字段。

@Data
@Builder
@AllArgsConstructor
public class NearHotspot {
    private Long id;
    private String name;
    private String description;
    private String category;
    private String address;
    private Integer zip;
    private String city;
    private String email;
    private String url;
    private String phone;
    private Double longitude;
    private Double latitude;
    private LocalDate createdAt;
    
    private Double distance;
}

我現在的問題是:如何將查詢結果映射到List<NearHotspot>

我認為有兩個問題:

  • 響應類型是一個列表
  • 查詢排序返回一個熱點對象和距離

您正試圖在查詢中返回 NearHotspot 對象和 sqrt 結果。 由於 sqrt,這將無法映射到 NearHotspot 實體對象。 您需要將結果投影到接口 dto,因為查詢結果無法映射到當前對象,因為查詢結果不同。 請參閱博客文章https://medium.com/swlh/spring-data-jpa-projection-support-for-native-queries-a13cd88ec166

另一種方法可能是使用返回值 List<Object[]> 並使用映射器從 List<Object[]> 映射到 NearHotspot。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM