我有以下查询,我得到了一个数据类型为Double的List。 在此查询中,我从特定位置获取经度和纬度以及距离。 使用“距离”参数,我可以选择不同位置之间的范围。
我现在的问题是,我希望获得一个完整的“城市” - 我的结果列表中的对象,而不仅仅是差异距离(双精度)中的列表。 我应该如何修改我从我的实体“城市”获得的列表,而不仅仅是Floats?
public List<Double> findCityAroundSelectedCity(double longitude, double latitude, float distance) {
String queryString = "SELECT (6371 * acos (cos(radians(" + latitude
+ ")) * cos(radians(latitude)) * cos(radians(longitude) - radians(" + longitude + ")) + sin(radians("
+ latitude + ")) * sin(radians(latitude)))) AS distance FROM City c HAVING distance < " + distance
+ " ORDER BY distance";
Query query = entityManager.createNativeQuery(queryString);
List<Double> list = null;
list = query.getResultList();
return list;
}
非常感谢您的帮助
答案 0 :(得分:0)
在查询中添加SELECT *
,并将您的实体指定为方法createNativeQuery()
的第二个参数......
尝试SQL
查询,类似于:
SELECT *
FROM ( SELECT *, ( 6371 * ACOS( COS( RADIANS( :lat ) ) * COS( RADIANS( latitude ) ) *
COS( RADIANS( longitude ) - RADIANS( :lng ) ) + SIN( RADIANS( :lat ) ) *
SIN( RADIANS( latitude ) ) ) ) AS distance
FROM City ) c
WHERE distance < :dis
ORDER BY distance
Java
部分:
public List<City> findCityAroundSelectedCity( double longitude, double latitude,
float distance )
{
// queryString should be a private static final, outside this method...
return (List<City>) entityManager.createNativeQuery( queryString, City.class )
.setParameter( "lat", latitude ).setParameter( "lng", longitude )
.setParameter( "dis", distance ).getResultList();
}
顺便说一下,如果它在表格中,这将返回源城市......