1. ホーム
  2. sql

[解決済み] JPQL IN句。Java-Array(またはLists, Sets...)?

2022-08-13 05:41:11

質問

データベースから、小さいけれども任意の数の値のいずれかに設定された textual タグを持つすべてのオブジェクトをロードしたいと思います。SQL でこれを行う論理的な方法は、"IN" 節を作成することでしょう。JPQL では IN を使用できますが、IN へのすべてのパラメータを直接指定する必要があるようです ("in (:in1, :in2, :in3)" というように)。

IN 節の値に展開されるべき配列またはリスト (または他のコンテナー) を指定する方法はありますか?

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

JPA1.0の場合はよくわかりませんが、JPA1.0の場合は Collection を渡すことができます。

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 .