2017-10-30 12 views
0

私のプロジェクトでは、私はHibernateを使用していますが、今は1つの問題で苦労しています。私が取り組んでいるプロジェクトでは、動的クエリのようなものを作成する必要があります。私は何が起こっているかを提示しましょう...Hibernateの動的クエリ

私は8つの異なる質問があります。 SELECTFROMWHERE句は、各クエリに対して同じである。

SELECT col1, col2, ..., colX FROM table WHERE col1 = :param1; 

点は1つのパラメータに基づいて、クエリの残りの部分は、それぞれの場合において異なることです。以下のケース:

  1. 単純なクエリ - 他のクエリのベースです。
  2. もう1つWHERE条件:AND col2 = :param2
  3. 前のものと同じですが、別の列の条件:AND col3 = :param2
  4. より複雑な - 別の列に再びWHERE節第二の条件でJOIN句、が、また、ここでは同じようなクエリのどの時点で3
  5. のようなまったく同じクエリでUNIONを持っています。 4、しかしWHERE句の前にUNION声明の異なる欄があります。
  6. クエリここ5
  7. のみJOINWHERE句の中のように、クエリ5.
  8. 同じルールで同じルール私はそれはそれだと思った3つの条件の代わりに、2

ですが、Iこれらのクエリのすべてに対して、動的に追加のWHERE条件を適用できますが、JOINがある場合は、SELECTの両方に表示する必要があります。

でも可能ですか?今私はStringBuilderif ... elseステートメントで正しい列名をメソッドに渡すことで問題を解決します。これはUNIONJOINおよびWHEREの条件を処理します。

私はそれを誇りに思っていないよ、私はそれを好きではないが、私はより良いこの問題を解決する方法がわからない...

+0

残りの 'WHERE'句に依存する余分なパラメータは何ですか?あなたはそれをどのように扱っているのですか?正確に何をしたかのコードサンプルを表示できますか?コード内でそれを見るのはもっと面白いと思います。 – g00dy

+0

私が念頭に置いておくべき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

+0

それはちょうどある価値であり、それに依存して、正しいクエリ(これらの8つのうちの1つ)が作成されるべきです。私はあなたがいくつかのクエリが 'JOIN'または' UNION'あるいはその両方を同時に持つことに気付かなかったと思うので、ビューは正しくありません。 – Lui

答えて