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