6
votes

Liste de modèles Hibernate de ressort en tant que paramètre

J'essaie d'exécuter cette requête: Code: xxx

avec IDS comme liste, ID est de type long

lorsque vous obtenez une exception

code: < Pré> xxx


2 commentaires

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 ...


5 Réponses :


11
votes

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();


0 commentaires

3
votes

Vous pouvez utiliser l'API de critère hibernate, il a une restriction "dans" "dans".

référence:


0 commentaires

10
votes

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); 


1 commentaires

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.



1
votes

Vous pouvez utiliser la liste des paramètres pour inclure dans votre requête avec 'in' et 'setparameterlist' xxx


0 commentaires

0
votes
   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();

0 commentaires