JPA(休眠) - 按经度/纬度查找最近的10个对象

时间:2017-07-15 18:52:02

标签: java spring hibernate jpa spring-data

如何按经度/纬度查询最近的10个对象(在我的情况下为经销商)。

每个经销商都有经度/纬度坐标。我正在使用Spring Data进行简单查询,但据我所知,没有选项可以将Spring数据用于此类查询。

1 个答案:

答案 0 :(得分:0)

如果您可以在基础数据库中执行此操作,则可以向实体类添加命名本机查询,并使用实体管理器执行该查询。

例如,我的GeoUnit类有一个Geofencing Native Query,它有两个纬度和经度参数:

@NamedNativeQuery(name = "GeoUnit.geofencing", query = "SELECT * FROM GeoUnit g WHERE " +
    "g.shape.STContains(geography::STPointFromText('POINT(' || :longitude" +
    " || ' ' || :latitude || ')', 4326)", resultClass = GeoUnit.class)
public class GeoUnit {
  // ...
}

调用它:

entityManager.createNativeQuery("GeoUnit.geofencing").setParameter("longitude", lon)
    .setParameter("latitude", lat).getResultList();

要让您的Entity类包含Java中的地理空间数据类型(它不一定非必须),您可以例如使用Hibernate Spatial:http://www.hibernatespatial.org/