Richtige Methode zum Schreiben einer HQL in (…) Abfrage

80

Angenommen, ich möchte die folgende HQL-Abfrage schreiben:

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

Was ist die richtige Art, dies als parametrisierte Abfrage zu schreiben, z

FROM Cat c WHERE c.id IN (?)
Robert Munteanu
quelle

Antworten:

130

Ich bin mir nicht sicher, wie ich das mit Positionsparametern machen soll, aber wenn Sie benannte Parameter anstelle von positionellen Parametern verwenden können, können benannte Parameter in Klammern gesetzt werden und die setParameterList- Methode von der Abfrageoberfläche kann verwendet werden, um die Liste der Werte an diesen Parameter zu binden.

...
Query query = session.createQuery("FROM Cat c WHERE c.id IN (:ids)");
query.setParameterList("ids", listOfIds);
...
Matej
quelle
11

In älteren Versionen von Hibernate ist die setParameterListMethode möglicherweise nicht aktiviert Query. Sie können immer noch setParameter("ids", listOfIds);den älteren für den gleichen Effekt aufrufen .

Travis
quelle
5
Warum wurde das überhaupt geändert? Ich habe gerade eine Stunde damit verbracht herauszufinden, warum IllegalArgumentException in class: org.ase.mip.persistence.entities.BaseEntityImpl, getter method of property: id (BasicPropertyAccessor.java:186))es passiert ist. Ich rief setParameterstatt setParameterList. DOH!
Opncow
-4

Benannte Parameter sind besser als Positionsparameter. Wir sollten bei der Betrachtung der Reihenfolge / Position vorsichtig sein - während benannte Parameter einfach sind.

Genannt:

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

Position:

Query query=em.createQuery("SELECT e FROM Employee e WHERE e.empId = ? and  e.empDepartment = ?");
query.setParameter(1, employeId);
query.setParameter(2, empDepartment);
Mittinti Ramana Murthy
quelle
3
Stimme voll und ganz zu, aber das beantwortet meine Frage zu IN (...) Anfragen nicht
Robert Munteanu