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?

¿Fue útil?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top