Det finns ett gammalt Hibernate-fel HHH-879 om problemet med org.hibernate.QueryException: duplicate association path
öppnade 2005 och fortfarande öppet...
Annat problem är stängt utan lösning HHH-7882
Så alternativ 1) är inte lämpligt.
Men i kommentarerna till ovanstående bugg en användbar lösning nämns med exists
Så använd två gånger sqlRestriction
med exists
och en korrelerad underfråga som filtrerar den korrekta kategorin. Du får bara företag kopplade till båda kategorierna.
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 ) );
Detta leder till följande fråga som ger rätt resultat
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 = ?)