2009-06-07 22 views

risposta

118

non sono sicuro come fare questo con il parametro posizionale, ma se è possibile utilizzare parametri denominati invece di posizionale, il parametro poi nominato possono essere messi tra parentesi e setParameterList metodo dal Query interfaccia può essere usata per legare la lista di valori a questo parametro.

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

versioni più vecchie di Hibernate non possono avere il metodo setParameterList su Query. Puoi comunque chiamare lo setParameter("ids", listOfIds); su uno più vecchio per lo stesso effetto.

+5

Perché ciò è stato cambiato in ogni modo? Ho appena trascorso un'ora a capire perché 'IllegalArgumentException in classe: org.ase.mip.persistence.entities.BaseEntityImpl, metodo getter di proprietà: id (BasicPropertyAccessor.java:186))' stava succedendo. Ho chiamato 'setParameter' invece di' setParameterList'. DOH! – opncow

-3

I parametri denominati sono migliori dei parametri posizionali, dovremmo stare attenti a osservare l'ordine/posizione, mentre named è semplice.

denominato:

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

posizionale:

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

Completamente d'accordo, ma questo non risponde alla mia domanda sulle domande IN (...) –

Problemi correlati