Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Critérios de criação de hibernação para ingressar na mesma tabela duas vezes - tentei 2 abordagens com erro de 2 diferenças


Existe um antigo bug do Hibernate HHH-879 no problema de org.hibernate.QueryException: duplicate association path aberto em 2005 e ainda aberto...

Outro problema está encerrado sem solução HHH-7882

Portanto, a opção 1) não é adequada.

Mas nos comentários do bug acima, uma solução útil é mencionado usando exists

Então use duas vezes sqlRestriction com exists e uma subconsulta correlacionada filtrando a categoria apropriada. Você receberá apenas empresas ligados a ambas as categorias.
crit.add( Restrictions.sqlRestriction( 
  "exists (select null from Company_Customercategory a where {alias}.company_Id = a.company_Id and a.CUSTOMERCATEGORYID = ?)",
  1, IntegerType.INSTANCE ) );
crit.add( Restrictions.sqlRestriction( 
  "exists (select null from Company_Customercategory a where {alias}.company_Id = a.company_Id and a.CUSTOMERCATEGORYID = ?)",
  6, IntegerType.INSTANCE ) );

Isso leva à seguinte consulta que fornece o resultado correto
select this_.COMPANY_ID as COMPANY_ID1_2_0_, this_.COMPANY_NAME as COMPANY_NAME2_2_0_ 
from COMPANIES this_ 
where exists (select null from Company_Customercategory a 
              where this_.company_Id = a.company_Id and a.CUSTOMERCATEGORYID =  ?) and 
      exists (select null from Company_Customercategory a 
              where this_.company_Id = a.company_Id and a.CUSTOMERCATEGORYID = ?)