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?

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top