2016-03-23 9 views
0

私はHibernateを初めて使いました。私はJavaで簡単なムービーファインダーアプリを作成しています。私はキーワードのリストで映画を検索する私のDAOのクエリをする必要があります。私はSQLでそれを行う方法を知っていますが、これを行うためのHQLクエリを作成する方法があるかどうか疑問に思っていました。 HQLでこのクエリを実行する方法はありますか?

SELECT * 
FROM movies 
WHERE name LIKE '%keyword1%' OR name LIKE 'keyword2' ... 

だから、これはすべてのリストトラフ反復処理し、キーワードごとにクエリを連結する必要がある達成するために:DAOでのJavaメソッドはkeyowrdsのリストで、SQL文は、このようなものですリストを受け取ります。

このクエリをHQLでよりシンプルにすることができるので、キーワードのリストをqueクエリに渡すことができますので、LIKE文で使用できますか?

ありがとうございました。

答えて

1
SELECT * 
FROM movies 
WHERE name LIKE '%keyword1%' OR name LIKE 'keyword2' 

は、あなたが名前付きパラメータkeyword1keyword2照会渡す必要があります

from movies m where m.name like :keyword1 or m.name like :keyword2 

としてHQLに変換します。

likeマッチャーを使用することを主張する場合は、リストをループしてクエリを動的に生成する必要があります。

もう1つの方法は、実際にはIN句をHQLで使用することです。ただし、ワイルドカードの一致は不可能です。

from movies m where m.name in (:keywords) 
+0

こんにちは、あなたの答えをありがとう! SQLワイルドカード "%"を使用する必要があるので、キーワードリストを繰り返して、右にクエリ文字列を作成するだけです。また、パラメータを正しく設定するためには、リストをもう一度繰り返す必要がありますか?ありがとう! –

+0

はい。しかし、同じ反復でパラメータを作成することもできます。 – Thihara

+0

その場合、 'named'パラメータの代わりに標準の'? 'パラメータを使うほうが簡単かもしれません。 – Thihara

0
Query qry = session.createQuery("From RegistrationBean as rb where rb."+searchCriteria+" like :sf"); 
qry.setString("sf",'%'+searchField+'%'); 
関連する問題