vincular múltiplos valores no hibernato usando a estrutura de reprodução
-
26-09-2019 - |
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?
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