句のJPQL:Java-Arrays(またはリスト、セット…)?
-
03-10-2019 - |
質問
テキストタグを持つすべてのオブジェクトを、データベースから小さいながら任意の数の値に設定したすべてのオブジェクトをロードしたいと思います。 SQLでこれを実行する論理的な方法は、「in」句を構築することです。 JPQLはINを許可しますが、すべてのパラメーターを直接指定する必要があるようです(in(:in1、:in2、:in3))。
句の値に展開する必要がある配列、またはリスト(またはその他のコンテナ)を指定する方法はありますか?
解決
JPA 1.0はわかりませんが、渡すことができます Collection
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());
Eclipselinkでテストしました。 Hibernate 3.5.1を使用すると、括弧でパラメーターを囲む必要があります。
String qlString = "select item from Item item where item.name IN (:names)";
しかし、これはバグであり、前のサンプルのJPQLクエリは有効なJPQLです。見る HHH-5126.
他のヒント
Oracleの制限は1000パラメーターです。この問題は、500のセットで合格したパラメーターリストを分割することにより、バージョン4.1.7の冬眠によって解決されました Jira HHH-1123を参照してください
所属していません StackOverflow