DANS la clause dans les requêtes HQL ou Java Persistence Query Language
J'ai le texte suivant paramétrés JPA, ou en veille prolongée, la requête:
SELECT entity FROM Entity entity WHERE name IN (?)
Je veux passer le paramètre comme une ArrayList<String>, est-ce possible? Hibernate actuel me dit, que
java.lang.ClassCastException: java.util.ArrayList cannot be cast to java.lang.String
Est-ce possible?
RÉPONSE: les Collections comme des paramètres de travailler uniquement avec des paramètres nommés comme ":name
", pas avec JDBC paramètres de style comme "?
".
- Auriez-vous l'esprit ajoutant votre réponse à cette question? Je sais que c'est un ancien, mais l'auto-répondre à votre question n'est pas seulement permise, il est explicitement encouragé.
Vous devez vous connecter pour publier un commentaire.
Êtes-vous en utilisant Hibernate
Query
objet, ou JPA? Pour JPA, il devrait fonctionner correctement:Pour Hibernate, vous aurez besoin d'utiliser la setParameterList:
List<String> list = Arrays.asList(yourArray);
dans les requêtes HQL vous pouvez utiliser des paramètres de la requête et de l'ensemble de la Collection avec setParameterList méthode.
En laissant en dehors de la parenthèse et de simplement appeler "setParameter' travaille maintenant avec au moins Hibernate.
À l'aide de pure JPA avec Hibernate 5.0.2.Final que le fournisseur de la suite semble fonctionner avec les paramètres positionnels ainsi:
Entity.java:
Dao.java: