Der er en gammel Hibernate-fejl HHH-879 om problemet med org.hibernate.QueryException: duplicate association path
åbnet 2005 og stadig åben...
Andet problem er lukket uden løsning HHH-7882
Så mulighed 1) er snarere ikke egnet.
Men i kommentarerne til ovenstående fejl er en nyttig løsning er nævnt ved hjælp af exists
Så brug sqlRestriction
to gange med exists
og en korreleret underforespørgsel, der filtrerer den korrekte kategori. Du får kun virksomheder forbundet med begge kategorier.
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 ) );
Dette fører til følgende forespørgsel, som giver det korrekte 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 = ?)