我开始使用hibernate进行查询,我注意到如果我想使用存储库执行查询,我必须使用存储库中的实体来Map返回数据库的值。
我是否可以在任何存储库中运行查询并返回数据并Map到具有相同名称的java类中。
喜欢
@Query(value = "SELECT location_id, (3959 * acos (cos(radians(:lat)) * cos(radians(l.latitude)) * cos(radians(l.longitude) - radians(:lon)) + sin(radians(:lat)) * sin(radians(l.latitude)))) AS distance FROM location l having distance < :mile order by distance limit 0, :limitNum", nativeQuery = true)
List<LocationDistance> searchLocationByRadius(@Param("lat") double lat, @Param("lon") double lon, @Param("mile") double distance, @Param("limitNum") int limit);
因此,查询返回的location\u id和distance字段将自动Map到locationdistance对象。
1条答案
按热度按时间ax6ht2ek1#
您有两种选择:
切换到jpql查询并在查询中使用构造函数,如:
在这种方法中,不能直接使用cos/sin/radians函数,因为jpql不支持它们。相反,您需要使用jpql
function
给他们打电话,比如:或者,如果使用hibernate,可以用hibernate方言注册函数。
切换到
@SqlResultSetMapping
以及@NamedNativeQuery
首先,您需要添加@SqlResultSetMapping
以及@NamedNativeQuery
实体类的注解。其次,您需要向spring存储库接口添加一个方法,该方法的名称与
@NamedNativeQuery
.