Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Hibernate Create Criteria, um zweimal an derselben Tabelle teilzunehmen - versuchte 2 Ansätze mit 2 Unterschiedsfehlern

Es gibt einen alten Hibernate-Fehler HHH-879 zum Problem org.hibernate.QueryException: duplicate association path 2005 eröffnet und immer noch geöffnet...

Anderes Problem ist ohne Lösung HHH-7882

geschlossen

Daher ist Option 1) eher ungeeignet.

Aber in den Kommentaren des obigen Fehlers ein nützlicher Workaround wird mit exists erwähnt

Verwenden Sie also zweimal sqlRestriction mit exists und eine korrelierte Unterabfrage, die die richtige Kategorie filtert. Sie erhalten nur Unternehmen mit beiden Kategorien verbunden.

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

Dies führt zu folgender Abfrage, die das richtige Ergebnis liefert

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