我有一个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>
?
我认为有两个问题:
答案 0 :(得分:0)
您正尝试在查询中返回NearHotspot对象和sqrt结果。由于sqrt,这将无法映射到NearHotspot实体对象。您将需要将结果投影到接口dto上,因为查询的结果不同,因此无法将查询的结果映射到当前对象。请参阅博客文章https://medium.com/swlh/spring-data-jpa-projection-support-for-native-queries-a13cd88ec166
另一种方法可能是使用返回值List