Question

Je suis en train de construire la requête dans le cadre de lecture, j'ai

select * from Candidate c where (:schools member of c.schools) 

Après je lie. École avec liste avec un élément, il renvoie le résultat, mais si je lie la liste avec plusieurs éléments ne se passe rien

Caused by: org.hibernate.hql.ast.QuerySyntaxException: unexpected AST node: {vector} [select c from models.Candidate c where (:schools0_, :schools1_ member of c.schools)  group by c.id order by RAND()]

En fait, je besoin de quelque chose comme

select * from candidate where schools in (x,x,x,x,x);

Relation entre le candidat et l'école est dans le tableau lié.

Est-il possible de lier plusieurs valeurs?

Était-ce utile?

La solution

Mise en veille prolongée, vous pouvez également utiliser directement la liste elle-même.

select c from Candidate c join c.schools as school where school.id in (:schools)

Le type de:. Paramètre écoles est typé en fonction de vos identifiants, par exemple List<Int> ou List<Long>

Autres conseils

En fait, je trouve où le problème est - membre peut être utilisé uniquement avec valeur unique et il fonctionne très bien. Lorsque nous avons besoin d'utiliser plusieurs valeurs le mieux est d'utiliser sql standard :

 select c from Candidate c inner join c.schools as school where school.id in (25980,25981)"

Rejoindre les tables liées est nécessaire -. Nous ne pouvons pas utiliser c.schools.id, donc nous devons INNER JOIN c.schools avec alias pour spécifier la colonne

Je pense que tous les débutants devraient vérifier http: //www.javatx. cn / mise en veille prolongée / référence / fr / html / queryhql.html

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top