unión múltiples valores en hibernación usando marco juego
-
26-09-2019 - |
Pregunta
Estoy tratando de construir consultas en el marco de reproducción, tengo
select * from Candidate c where (:schools member of c.schools)
Después de que se unen:. La escuela con la lista con un elemento que devuelve resultado, pero si se unen con múltiples elementos de lista no pasa nada
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 realidad necesito algo así como
select * from candidate where schools in (x,x,x,x,x);
Relación entre el candidato y la escuela está en la tabla vinculada.
¿Hay alguna manera de enlazar varios valores?
Solución
Con Hibernate, también se puede utilizar directamente la propia lista.
select c from Candidate c join c.schools as school where school.id in (:schools)
El tipo de los:. Escuelas parámetro se escribe de acuerdo con sus identificaciones, por ejemplo List<Int>
o List<Long>
Otros consejos
En realidad he encontrado dónde está el problema - miembro del puede ser utilizado únicamente con valor único y trabaja muy bien. Cuando tenemos que utilizar varios valores lo mejor es utilizar SQL estándar
select c from Candidate c inner join c.schools as school where school.id in (25980,25981)"
Junto a las tablas vinculadas se requiere -. No podemos usar c.schools.id, por lo que necesitamos combinación interna c.schools con alias para especificar la columna
creo que todos los principiantes deben comprobar http: //www.javatx. cn / hibernación / referencia / en / html / queryhql.html