web-dev-qa-db-ja.com

Hibernate HQLクエリ:コレクションをクエリの名前付きパラメーターとして設定する方法

次のHQLクエリがある場合:

_FROM
    Foo
WHERE
    Id = :id AND
    Bar IN (:barList)
_

QueryオブジェクトのsetInteger()メソッドを使用して_:id_を設定します。

オブジェクトのListを使用して_:barList_を設定したいのですが、Hibernateのドキュメントとメソッドのリストを見ると、使用する明らかな選択がわかりません。何か案は?

64
karlgrz

Query.setParameterList()Javadoc here を使用します。

選択できるバリアントは4つあります。

91
Jason Cohen

HQLについてはわかりませんが、JPAでは、パラメーターとコレクションでクエリのsetParameterを呼び出すだけです。

Query q = entityManager.createQuery("SELECT p FROM Peron p WHERE name IN (:names)");
q.setParameter("names", names);

ここで、namesは、検索する名前のコレクションです

Collection<String> names = new ArrayList<String();
names.add("Joe");
names.add("Jane");
names.add("Bob");
31
Steve Kuo

TorpedoQuery では次のようになります

Entity from = from(Entity.class);
where(from.getCode()).in("Joe", "Bob");
Query<Entity> select = select(from);
1
xjodoin