テキストタグが小さいが任意の数の値に設定されているすべてのオブジェクトをデータベースからロードしたいと思います。SQLでこれを実行する論理的な方法は、「IN」句を作成することです。JPQLではINを使用できますが、すべてのパラメーターをINに直接指定する必要があるようです(「in(:in1、:in2、:in3)」のように)。
IN句の値に展開する必要がある配列またはリスト(またはその他のコンテナー)を指定する方法はありますか?
テキストタグが小さいが任意の数の値に設定されているすべてのオブジェクトをデータベースからロードしたいと思います。SQLでこれを実行する論理的な方法は、「IN」句を作成することです。JPQLではINを使用できますが、すべてのパラメーターをINに直接指定する必要があるようです(「in(:in1、:in2、:in3)」のように)。
IN句の値に展開する必要がある配列またはリスト(またはその他のコンテナー)を指定する方法はありますか?
I'm not sure for JPA 1.0 but you can pass a Collection
in JPA 2.0:
String qlString = "select item from Item item where item.name IN :names";
Query q = em.createQuery(qlString, Item.class);
List<String> names = Arrays.asList("foo", "bar");
q.setParameter("names", names);
List<Item> actual = q.getResultList();
assertNotNull(actual);
assertEquals(2, actual.size());
Tested with EclipseLInk. With Hibernate 3.5.1, you'll need to surround the parameter with parenthesis:
String qlString = "select item from Item item where item.name IN (:names)";
But this is a bug, the JPQL query in the previous sample is valid JPQL. See HHH-5126.
Oracleの制限は1000パラメータです。この問題は、バージョン4.1.7の休止状態によって解決されましたが、渡されたパラメーターリストを500のセットに分割することにより、 JIRAHHH-1123を参照してください。
この種のSQLに問題があり、IN句で空のリストを指定していました(空でない場合は常にリストを確認してください)。多分私の練習は誰かを助けるでしょう。