lier plusieurs valeurs en veille prolongée en utilisant le framework de jeu
-
26-09-2019 - |
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?
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