Bindung mehrere Werte in den Ruhezustand spiel Framework
-
26-09-2019 - |
Frage
Ich versuche zu bauen Abfrage im Play-Framework, ich habe
select * from Candidate c where (:schools member of c.schools)
Nachdem ich binden. Schule mit Liste mit einem Element, es gibt Ergebnis, aber wenn ich bind Liste mit mehreren Elementen nichts passiert
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()]
Eigentlich brauche ich so etwas wie
select * from candidate where schools in (x,x,x,x,x);
Die Beziehung zwischen Kandidaten und Schule in der verknüpften Tabelle ist.
Gibt es eine Möglichkeit, mehrere Werte zu binden?
Lösung
Mit Hibernate können Sie auch selbst direkt die Liste verwenden.
select c from Candidate c join c.schools as school where school.id in (:schools)
Die Art der:. Schulen Parameter nach Ihrem IDs eingegeben wird, zum Beispiel List<Int>
oder List<Long>
Andere Tipps
Eigentlich fand ich, wo das Problem ist - Mitglied von kann nur mit Einzelwert verwendet werden, und es funktioniert gut. Wenn wir mehrere Werte verwenden müssen, ist die beste Standard-SQL verwenden :
select c from Candidate c inner join c.schools as school where school.id in (25980,25981)"
die verknüpften Tabellen Beitritt erforderlich ist -. Wir können nicht c.schools.id verwenden, so dass wir zum inneren müssen beitreten c.schools mit alias die Spalte angeben
Ich denke, alle Anfänger überprüfen sollten http: //www.javatx. cn / Hibernate / Referenz / en / html / queryhql.html