2017-09-04 83 views
0

我有以下查詢,並獲得了數據類型爲Double的List。 在這個查詢中,我有一個特定的位置和距離作爲參數的經度和緯度。 隨着「距離」參數我可以選擇不同位置之間的範圍。HQL,SQL - 獲取整個對象(獲取距離)

我的問題是現在,我想要得到一個完整的「城市」 - 在我的結果列表中的對象,而不是從不同距離(雙)的列表。 我應該如何修改我從我的實體「城市」獲得一個列表,而不僅僅是花車?

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

添加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(); 
} 

BTW,這將返回源城爲好,如果是在表...

+0

太謝謝你了!一個問題 - 我如何排除源城市? – CommanderHP

+0

爲參數(方法和查詢)和'WHERE'子句中的'id <>:id'添加一些唯一的ID ... –

+0

使用此唯一ID和距離可以「改善」 ,並從表本身獲取長/緯度值,通過編號... –