Er is een oude Hibernate-bug HHH-879 op het probleem van org.hibernate.QueryException: duplicate association path
2005 geopend en nog steeds open...
Ander probleem is gesloten zonder oplossing HHH-7882
Dus optie 1) is eerder niet geschikt.
Maar in de opmerkingen van de bovenstaande bug een handige oplossing wordt vermeld met exists
Dus gebruik tweemaal sqlRestriction
met exists
en een gecorreleerde subquery die de juiste categorie filtert. U krijgt alleen bedrijven verbonden met beide categorieën.
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 ) );
Dit leidt tot de volgende query die het juiste resultaat oplevert
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 = ?)