2

ストアファインダーアプリケーションで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を使用する方法はありますか?

4

1 に答える 1

1

Hibernate でこれら 2 つの獣を組み合わせる最良の方法は何ですか?

私の知る限り、それは不可能です。したがって、Criteria クエリを使用してすべてを記述するか (個人的には、あなたが求めていることを行う方法がわかりません)、動的な HQL 文字列を計算します。

于 2010-10-07T10:43:30.577 に答える