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?

War es hilfreich?

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top