ストアファインダーアプリケーションでHibernateを使用しています。SQLでの近接検索には、半正矢関数を使用します。これは少し厄介な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でこれら2つの獣を組み合わせる最良の方法は何ですか?(つまり、フィルターを満たす特定のポイントの周囲のすべての場所が必要です。)たとえば、条件検索でサブクエリとしてNamedQueryを使用する方法はありますか?