私のプロジェクトでは、私はHibernateを使用していますが、今は1つの問題で苦労しています。私が取り組んでいるプロジェクトでは、動的クエリのようなものを作成する必要があります。私は何が起こっているかを提示しましょう...Hibernateの動的クエリ
私は8つの異なる質問があります。 SELECT
、FROM
第WHERE
句は、各クエリに対して同じである。
SELECT col1, col2, ..., colX FROM table WHERE col1 = :param1;
点は1つのパラメータに基づいて、クエリの残りの部分は、それぞれの場合において異なることです。以下のケース:
- 単純なクエリ - 他のクエリのベースです。
- もう1つ
WHERE
条件:AND col2 = :param2
。 - 前のものと同じですが、別の列の条件:
AND col3 = :param2
。 - より複雑な - 別の列に再び
WHERE
節第二の条件でJOIN
句、が、また、ここでは同じようなクエリのどの時点で3 - のようなまったく同じクエリで
UNION
を持っています。 4、しかしWHERE
句の前にUNION
声明の異なる欄があります。 - クエリここ5
- のみ
JOIN
とWHERE
句の中のように、クエリ5. - 同じルールで同じルール私はそれはそれだと思った3つの条件の代わりに、2
ですが、Iこれらのクエリのすべてに対して、動的に追加のWHERE
条件を適用できますが、JOIN
がある場合は、SELECT
の両方に表示する必要があります。
でも可能ですか?今私はStringBuilder
とif ... else
ステートメントで正しい列名をメソッドに渡すことで問題を解決します。これはUNION
、JOIN
およびWHERE
の条件を処理します。
私はそれを誇りに思っていないよ、私はそれを好きではないが、私はより良いこの問題を解決する方法がわからない...
残りの 'WHERE'句に依存する余分なパラメータは何ですか?あなたはそれをどのように扱っているのですか?正確に何をしたかのコードサンプルを表示できますか?コード内でそれを見るのはもっと面白いと思います。 – g00dy
私が念頭に置いておくべき1つの解決策は、外部パラメータに基づいて、その異なる部分を返すビューを作成することです。 'createまたはreplace view view_over_table ext_valueとして 'external_param_value1'を選択し、tableからcol1、col2を選択します。条件1 共用体 ext_valueとして 'external_param_value2'を、table1からcondition1およびcondition2; 'にcol1、col2を選択します。 'SELECT * FROM view_over_table where ext_value =:external_param_that_determines_the_logic;' - そうでしょうか?これを行うことで、ビューの背後にある複雑さを隠すことができます。 – g00dy
それはちょうどある価値であり、それに依存して、正しいクエリ(これらの8つのうちの1つ)が作成されるべきです。私はあなたがいくつかのクエリが 'JOIN'または' UNION'あるいはその両方を同時に持つことに気付かなかったと思うので、ビューは正しくありません。 – Lui