繁体   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