次のような NamedQuery を構築しました。
@NamedQuery(name = "EventLog.viewDatesInclude",
query = "SELECT el FROM EventLog el WHERE el.timeMark >= :dateFrom AND "
+ "el.timeMark <= :dateTo AND "
+ "el.name IN (:inclList)")
私がやりたいのは、パラメータ :inclList に 1 つの項目ではなく項目のリストを入力することです。たとえば、new List<String>() { "a", "b", "c" }
:inclList パラメータでそれを取得するにはどうすればよいですか? コード化できるのは 1 つの文字列だけです。たとえば、次のようになります。
setParameter("inclList", "a") // works
setParameter("inclList", "a, b") // does not work
setParameter("inclList", "'a', 'b'") // does not work
setParameter("inclList", list) // throws an exception
文字列を作成して、そこからクエリ全体を構築できることはわかっていますが、オーバーヘッドを避けたいと思いました。これを行うより良い方法はありますか?
関連する質問: リストが非常に大きい場合、そのようなクエリを構築する良い方法はありますか?
ベストアンサー1
IN
コレクション値のパラメータを使用する場合、以下は必要ありません(...)
。
@NamedQuery(name = "EventLog.viewDatesInclude",
query = "SELECT el FROM EventLog el WHERE el.timeMark >= :dateFrom AND "
+ "el.timeMark <= :dateTo AND "
+ "el.name IN :inclList")