vincolanti valori multipli in ibernazione utilizzando il framework gioco
-
26-09-2019 - |
Domanda
Sto cercando di costruire in interrogazione quadro Play, ho
select * from Candidate c where (:schools member of c.schools)
Dopo che ho bind:. Scuola con List con un elemento che restituisce il risultato, ma se mi legano lista con più elementi non succede nulla
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()]
In realtà ho bisogno di qualcosa come
select * from candidate where schools in (x,x,x,x,x);
Relazione tra candidato e la scuola è in tabella collegata.
C'è un modo per associare più valori?
Soluzione
Con Hibernate, è anche possibile utilizzare direttamente la lista stessa.
select c from Candidate c join c.schools as school where school.id in (:schools)
Il tipo di:. Scuole parametro viene digitato in base alle proprie ids, ad esempio List<Int>
o List<Long>
Altri suggerimenti
In realtà ho trovato dove il problema è - membro può essere utilizzato solo con il singolo valore e funziona benissimo. Quando abbiamo bisogno di utilizzare più valori il migliore è quello di utilizzare SQL standard :
select c from Candidate c inner join c.schools as school where school.id in (25980,25981)"
Unire le tabelle collegate è necessario -. Non possiamo usare c.schools.id, quindi abbiamo bisogno di join interno c.schools con alias per specificare la colonna
Credo che tutti i principianti dovrebbero verificare http: //www.javatx. cn / hibernate / riferimento / it / html / queryhql.html