Pergunta

Eu estou tentando construir uma consulta com critérios Hibernate para o seguinte cenário:

  • Duas entidades: (. Cada um com as suas próprias tabelas, classes etc) Indicator e relatório
  • um indicador pode ser usado em zero a muitos relatórios
  • Um relatório usa zero a muitos indicadores
  • , portanto, eu tenho uma tabela de intersecção para armazenar a relação
  • a relação é definida em ambas as classes e seus mapeamentos de hibernação
  • na interface do usuário, o usuário pode selecionar um ou vários relatórios (entre outras coisas), e eu gostaria de consultar o DB para os indicadores utilizados nesses relatórios

Eu tentei o seguinte:

criteria.add(Restrictions.in("Reports", selectedReports));

mas tudo que eu vejo é uma instrução SQL estranha com

where this_.Indicator_ID in (?)

e, em seguida, uma exceção de JDBC (parâmetro ausente)

Todas as idéias? Obrigado.

Nota: Eu olhei para Consultando ManyToManyrelationship com critérios Hibernate , mas a solução aceite que existe para construir um costume sql-string ...

Foi útil?

Solução

  Criteria c = session.createCriteria(Indicator.class);
    c.add(Restrictions.eq("someField", myObject).createCriteria("reports")
    .add(Restrictions.eq("reportName", name);
    c.list();

Você precisa criar uma sub critérios para a entidade que está sendo realizada em uma coleção em alguma outra entidade.

String[] selectedReportsId = {"1", "2", "3"};
 c.add(Restrictions.eq("someField",myObject).createCriteria("reports")
    .add(Restrictions.in("id", selectedReportsId);

Então confira o bit de transformar os resultados aqui: https: // docs. jboss.org/hibernate/orm/3.3/reference/en-US/html/querycriteria.html#querycriteria-associations

Além disso, este pode lançar alguma luz sobre o que você pode fazer w / critérios: http://www.hibernate.org/hib_docs/ v3 / API / org / hibernate / critério / Restrictions.html

Outras dicas

Se você deve, aqui estão algumas sugestões que o Google voltou com depois de procurar por "hibernação hql muitos-para-muitos":

http://patf.net /blogs/index.php?blog=2&c=1&more=1&pb=1&tb=1&title=many_to_many_in_hql

E a partir dos fóruns do Hibernate:

http://forum.hibernate.org/viewtopic.php?p = 2340747 & sid = d4c8d2fcc16aed0201f73eb74619692a

E a partir dos fóruns Primavera:

http://forum.springframework.org/showthread.php?t=36870

Hope estes ajuda.

Por enquanto, é assim que eu comecei a trabalhar (graças a ZMF).

Criteria subcrit = criteria.createCriteria("Reports");
Disjunction dis = Restrictions.disjunction();
for (Reports r : selectedReports) {
    dis.add(Restrictions.idEq(r.getID()));
}
subcrit.add(dis);

Isto é quase exatamente o que ZMF sugeriu, tudo o que foi acrescentado a disjunção para construir os critérios da coleção que é passado ao redor.

Tudo o que resta a fazer é tentar usar a coleção diretamente ...

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