java条件查询带有用户自定义函数的where谓词
我在postgreSQL中创建了一个函数来计算两个坐标之间的距离。我想在我的项目中使用它,将函数的结果与用户指定的最大距离进行比较。 我的函数如下所示:
create or replace function distance(lat double precision, lng double precision, db_lat double precision, db_lng double precision)
returns double precision as $dist$
begin
return
6371 * acos(
cos(radians(lat)) * cos(radians(db_lat))
*
cos(radians(db_lng) - radians(lng))
+
sin(radians(lat))
*
sin(radians(db_lat))
);
end;
$dist$ language plpgsql;
它计算两个坐标之间的距离,一个是用户给定的(设置一个接近他们想要找到记录的点),另一个(使用db_1;)是数据库中现有记录的距离。 当我在pgAdmin中尝试它时,它可以工作,但我不确定如何在我的java项目中实现它:
public static Specification<Rental> inProximity(Double distance, Double lat, Double lng) {
if (distance == null || lat == null || lng == null) {
return null;
} else {
return (root, query, cb) ->
cb.greaterThanOrEqualTo(
distance,
cb.function("distance", Double.class,
cb.literal(lat),
cb.literal(lng),
root.get("locationLat"),
root.get("locationLng"))
);
}
}
它用红色标记每件事,错误是:Cannot resolve method 'greaterThanOrEqualTo(java.lang.Double, javax.persistence.criteria.Expression<T>)'
为什么函数的返回值没有标记为Double,以便比较两个Double
当我没有用cb.literal(),
包装我的lat和lng时,错误是这样的:
# 1 楼答案
哇,这比我想象的容易多了
应该是
不知怎么搞砸了订单