J'essaie d'exécuter cette requête:
Code: avec IDS comme liste, ID est de type long p> lorsque vous obtenez une exception p> code: p> < Pré> xxx pré> p>
5 Réponses :
Si vous souhaitez ajouter une liste à une clause en clause, il est préférable d'utiliser un paramètre nommé. Ceci est fait comme si tellement.
Query q = this.getHibernateTemplate().getSession().createQuery("select distinct ci.customer " +
"from CustomerInvoice ci " +
"where ci.id in (:idsParam) ");
q.setParameter("idsParam", ids);
List<Customer> = q.getResultList();
Vous pouvez utiliser l'API de critère hibernate, il a une restriction "dans" "dans". p>
BTW. Soyez conscient des cas où la collection IDS est vide! (non seulement si vous utilisez l'API de critères) P>
En plus de la réponse de MR_FR0G, celui-ci fonctionne également:
this.getHibernateTemplate()
findByNamedParam("select distinct ci.customer " +
"from CustomerInvoice ci " +
"where ci.id in (:ids) ", "ids", ids);
Trois acclamations pour la syntaxe plus courte! Ne soyez pas dupe en pensant que vous avez besoin de constructeurs de cordes élaborés pour les prédicats.
Vous pouvez utiliser la liste des paramètres pour inclure dans votre requête avec 'in' et 'setparameterlist'
ProjectionList projList =
Projections.projectionList().add("customer","customer");
List<Long> ids = ids;
Criteria criteria = hibernateTemplate.getSessionFactory().getCurrentSession()
.createCriteria(CustomerInvoice.class)
.add(Restrictions.in("id",ids))
.setProjection(projList); List<Long> listOfIds = criteria.list();
il est. C'est écrit dans la question. Mais cela devrait fonctionner.
org.life.java pourquoi tu es d'espoir? C'est la liste, je peux utiliser toute autre collection si ...