2009-06-07 9 views

Répondre

118

Je ne suis pas sûr comment faire cela avec le paramètre de position, mais si vous pouvez utiliser des paramètres nommés à la place du paramètre de position, puis le nom peut être placé entre crochets et setParameterList méthode à partir Query l'interface peut être utilisée pour lier la liste des valeurs à ce paramètre.

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

Les anciennes versions de mise en veille prolongée peuvent ne pas avoir la méthode setParameterList sur Query. Vous pouvez toujours appeler setParameter("ids", listOfIds); sur l'ancien pour le même effet.

+5

Pourquoi cela at-il été changé de toute façon? Juste passé une heure à comprendre pourquoi 'IllegalArgumentException dans la classe: org.ase.mip.persistence.entities.BaseEntityImpl, getter méthode de la propriété: id (BasicPropertyAccessor.java:186))' se passait. J'ai appelé 'setParameter' au lieu de' setParameterList'. DOH! – opncow

-3

Les paramètres nommés sont meilleurs que les paramètres de position, nous devons faire attention à l'ordre/la position - alors que le nom est facile.

Nommée:

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

positionnel:

Query query=em.createQuery("SELECT e FROM Employee e WHERE e.empId = ? and e.empDepartment = ?"); 
query.setParameter(1, employeId); 
query.setParameter(2, empDepartment); 
+2

Tout à fait d'accord, mais cela ne répond pas à ma question sur les requêtes IN (...) –

Questions connexes