hql,sql-获取整个对象(获取距离)

qnyhuwrf  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(362)

我有下面的查询,得到了一个数据类型为double的列表。在这个查询中,我把一个特定位置的经度和纬度以及距离作为参数。使用“距离”参数,我可以选择不同位置之间的距离。
我现在的问题是,我想得到一个完整的“城市”-在我的结果列表中的对象,而不仅仅是来自不同距离的列表(双精度)。我应该如何修改我从我的实体“城市”得到的列表,而不仅仅是浮动?

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;
}

非常感谢你的帮助

zfycwa2u

zfycwa2u1#

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

顺便说一句,这将返回源城市以及,如果它是在表中。。。

相关问题