2010-10-10 13 views
4

Quelqu'un peut-il suggérer la syntaxe correcte pour une clause where en utilisant in appliqué à une liste? La requête suivante dans un fichier .hbm génère une exception parse :Hibernate requête où l'élément dans la liste

<query name="Nutrient.findNutrients1"> 
    <![CDATA[from Nutrient as nutrient where nutrient.id in elements(?)]]> 
</query> 

l'exception suivante:

PARSER.reportError (56) | ligne 2:95: en attente d'IDENT, trouvé '?' SessionFactoryImpl. (395) | Erreur dans la requête nommée: Nutrient.findNutrients1 org.hibernate.hql.ast.QuerySyntaxException: en attente d'IDENT, trouvé '?' (?) près de la ligne 2, colonne 95 [de nutriments comme nutriments où nutrient.id dans éléments

Répondre

4

Retirez la elements partie de votre requête:

<query name="Nutrient.findNutrients1"> 
    <![CDATA[from Nutrient as nutrient where nutrient.id in (:ids)]]> 
</query> 

et invoquez comme ceci:

List<Long> vals = Arrays.asList(1L, 2L); 

Query q = session.getNamedQuery("Nutrient.findNutrients1"); 
q.setParameterList("ids", vals); 
List<Nutrient> result = q.list(); 
+0

Merci pour votre inscription. Cependant, je ne suis pas sûr de savoir comment utiliser les paramètres nommés dans une requête définie dans un fichier .hbm - Je pensais que vous deviez le faire tout au long de la session ... Savez-vous si cela peut être fait via .hbm? – Greg

+0

@Greg Vous pouvez utiliser des paramètres positionnels ou nommés dans les requêtes nommées. Mais ce n'est pas la partie importante de toute façon. Je peux l'enlever si vous préférez :) –

+0

@Pascal Plutôt que de supprimer, cela vous dérangerait-il d'ajouter un petit peu pour montrer comment passer dans le paramètre nommé dans ce contexte? – Greg