HQL,SQL - 获取整个对象(获取距离)

时间:2017-09-04 18:30:41

标签: java hibernate hql

我有以下查询,我得到了一个数据类型为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;
}

非常感谢您的帮助

1 个答案:

答案 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();
}
顺便说一下,如果它在表格中,这将返回源城市......