1. ホーム
  2. java

[解決済み] JPAクエリにIN句リストを追加する

2022-05-07 23:06:55

質問

以下のような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

文字列をビルドして、そこからクエリ全体をビルドすることもできるのですが、オーバーヘッドを避けたかったんです。 何か良い方法はないでしょうか?

関連する質問:リストが非常に大きい場合、そのようなクエリを作成する良い方法はありますか?

どのように解決するのですか?

使用時 IN をコレクション値パラメータで指定すると、不要になります。 (...) :

@NamedQuery(name = "EventLog.viewDatesInclude", 
    query = "SELECT el FROM EventLog el WHERE el.timeMark >= :dateFrom AND " 
    + "el.timeMark <= :dateTo AND " 
    + "el.name IN :inclList")