[英]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.