HQL,SQL - 获取整个对象(获取距离)
HQL, SQL - Get whole object (Get distance)
我有以下查询,我得到了一个数据类型为 Double 的列表。
在此查询中,我将特定位置的经度和纬度以及距离作为参数。
使用 "distance" 参数,我可以 select 不同位置之间的范围。
我现在的问题是,我想得到一个完整的 "City" - 结果列表中的对象,而不仅仅是来自不同距离(双)的列表。
我应该如何修改我从我的实体 "City" 而不仅仅是 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;
}
非常感谢大家的帮助
在查询中添加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();
}
顺便说一句,这也会 return 源城市,如果它在 table...
我有以下查询,我得到了一个数据类型为 Double 的列表。 在此查询中,我将特定位置的经度和纬度以及距离作为参数。 使用 "distance" 参数,我可以 select 不同位置之间的范围。
我现在的问题是,我想得到一个完整的 "City" - 结果列表中的对象,而不仅仅是来自不同距离(双)的列表。 我应该如何修改我从我的实体 "City" 而不仅仅是 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;
}
非常感谢大家的帮助
在查询中添加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();
}
顺便说一句,这也会 return 源城市,如果它在 table...