Pergunta

Estou tentando criar consulta no quadro de jogo, eu tenho

select * from Candidate c where (:schools member of c.schools) 

Depois de vincular: a escola com a lista com um elemento, ela retorna o resultado, mas se eu vincular a lista com vários elementos, nada acontecerá.

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()]

Na verdade eu preciso de algo como

select * from candidate where schools in (x,x,x,x,x);

A relação entre candidato e escola está na tabela vinculada.

Existe alguma maneira de vincular vários valores?

Foi útil?

Solução

Com o Hibernate, você também pode usar diretamente a própria lista.

select c from Candidate c join c.schools as school where school.id in (:schools)

O tipo do parâmetro: escolas é digitado de acordo com seus IDs, por exemplo List<Int> ou List<Long>.

Outras dicas

Na verdade, eu descobri onde está o problema - membro de pode ser usado apenas com valor único e funciona bem. Quando precisamos usar vários valores, o melhor é usar o SQL padrão dentro:

 select c from Candidate c inner join c.schools as school where school.id in (25980,25981)"

É necessário juntar -se às tabelas vinculadas - não podemos usar o C.schools.ID, por isso precisamos entrar no C.schools interno com alias para especificar a coluna.

Eu acho que todos os iniciantes devem verificar http://www.javatx.cn/hibernate/reference/en/html/queryhql.html

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top