Oracle
 sql >> Base de données >  >> RDS >> Oracle

Hibernate Create Criteria pour rejoindre la même table deux fois - a essayé 2 approches avec 2 erreurs de différence

Il existe un ancien bogue Hibernate HHH-879 sur le problème de org.hibernate.QueryException: duplicate association path ouvert en 2005 et toujours ouvert...

L'autre problème est fermé sans solution HHH-7882

L'option 1) n'est donc pas adaptée.

Mais dans les commentaires du bogue ci-dessus, une solution de contournement utile est mentionné en utilisant exists

Utilisez donc deux fois sqlRestriction avec exists et une sous-requête corrélée filtrant la catégorie appropriée. Vous n'obtiendrez que des entreprises connecté aux deux catégories.

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 ) );

Cela conduit à la requête suivante qui fournit le résultat correct

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 = ?)