我在 storefinder 应用程序中使用 Hibernate。对于 SQL 中的邻近搜索,我使用 hasrsine 公式。因为这是一个有点混乱的 SQL,我为此在我的 .hbm.xml 文件中创建了一个命名的 SQL 查询。
SELECT
location.*,
( 3959 * acos( cos( radians(7.4481481) ) *
cos( radians( X(location.coordinates) ) ) *
cos( radians( Y(location.coordinates) ) - radians(46.9479986) ) +
sin( radians(7.4481481) ) * sin( radians( X(location.coordinates) ) ) ) )
AS distance
FROM
location
WHERE
location.coordinates IS NOT NULL
HAVING
distance < :radius
ORDER BY
distance ASC
LIMIT :max
但我也有一个用户定义的过滤器(营业时间、分类等)。为此,我使用 Hibernate 标准以编程方式添加过滤器。
现在我有一个完美运行的 NamedQuery,它为我提供了某个点周围的所有位置,以及一个完美运行的标准查询,它根据某个过滤器为我提供了所有位置。
我的问题是:在 Hibernate 中结合这两种野兽的最佳方式是什么?(即,我需要满足某个过滤器的某个点周围的所有位置。)例如,有什么方法可以将 NamedQuery 用作条件搜索中的子查询?