2011-07-28 9 views
1

2つのテーブル行の関数を計算するSQLビューを作成しました。私はハイバネートクエリの出力を制限するためにビューを使用したいが、それを行うための最善の方法はわからない。HibernateクエリでSQLビューにどのように参加できますか?

SELECT Thing t1 
INNER JOIN Thing t2 ... 
INNER JOIN ... 
INNER JOIN f_view v ON v.a_id = t1.id AND v.b_id = t2.id 
WHERE t2.id = ? AND ... AND v.f < ? 

は、それが合理的な休止状態で、このようなビューを使用することです:

CREATE FUNCTION f(ax, ay, bx, by) AS ... ; 

CREATE VIEW f_view AS 
    SELECT a.id a_id, b.id b_id, f(a.x, a.y, b.x, b.y) f FROM thing a, thing b; 

は、今私は、このSQLクエリに似休止クエリを書きたい:

ビューが保存された機能をカプセル化クエリ?ここ

答えて

1

あなたの唯一のオプションは以下のとおりです。

  1. は、Hibernateでのごf_view(最も可能性が高い不変)として実体地図 - あなたは、あなたのHQLクエリーに含めることができます。

  2. 代わりにSQLとしてクエリを作成し、その結果を(管理対象または非管理対象の)エンティティにマップします。 HibernateリファレンスのChapter 18はここにすべての可能性を示しています。

+0

ありがとうございます。私はそれが事実であることを恐れていた。私は質問を書く前にオプション2を取ったが、それはうまくいくが、それは醜い。私はビューをマッピングすることを検討しましたが、ビュー行のIDについて何をすべきか分かりません。 –

+0

@kevin 'a_id' /' b_id'の組み合わせはあなたのビュー内で一意ですか?その場合は、コンポジット識別子としてマップすることができます。そうでなければ 'f_view'が不変で、Hibernateによって直接検索されない(例えば結合でのみ使われる)限り、実際には重複したIDで取り除くことができる限り、そこに' f'を入れても構いません。 – ChssPly76

+0

はい、ユニークです。私はそのアプローチも考えました。私はそれを試してみましょう。 –

関連する問題