81

次のHQLクエリを記述したいとします。

FROM Cat c WHERE c.id IN (1,2,3)

これをパラメーター化されたクエリとして記述する適切な方法は何ですか。

FROM Cat c WHERE c.id IN (?)
4

3 に答える 3

132

位置パラメータでこれを行う方法はわかりませんが、位置パラメータの代わりに名前付きパラメータを使用できる場合は、名前付きパラメータを括弧内に配置し、 QueryインターフェイスのsetParameterListメソッドを使用して値のリストをこのパラメータにバインドできます。

...
Query query = session.createQuery("FROM Cat c WHERE c.id IN (:ids)");
query.setParameterList("ids", listOfIds);
...
于 2009-06-07T13:13:02.787 に答える
12

古いバージョンの Hibernate にはsetParameterListメソッド onがない場合がありQueryます。setParameter("ids", listOfIds);同じ効果のために古いものを呼び出すことができます。

于 2011-08-05T11:18:12.037 に答える
-4

名前付きパラメーターは位置パラメーターよりも優れています。名前付きパラメーターは簡単ですが、順序/位置に注意する必要があります。

名前:

Query query = session.createQuery("select count(*) from User"+" where userName=:userName and passWord=:passWord");
        query.setString("userName", userName);
        query.setString("passWord", passWord);

ポジショナル:

Query query=em.createQuery("SELECT e FROM Employee e WHERE e.empId = ? and  e.empDepartment = ?");
query.setParameter(1, employeId);
query.setParameter(2, empDepartment);
于 2017-02-24T12:05:49.967 に答える