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 (?)
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 (?)
Antworten:
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);
...
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);
IllegalArgumentException in class: org.ase.mip.persistence.entities.BaseEntityImpl, getter method of property: id (BasicPropertyAccessor.java:186))
es passiert ist. Ich riefsetParameter
stattsetParameterList
. DOH!