Има стара грешка в Hibernate HHH-879 относно проблема с org.hibernate.QueryException: duplicate association path
отвори през 2005 г. и все още е отворено...
Друг проблем е приключен без решение HHH-7882
Така че вариант 1) по-скоро не е подходящ.
Но в коментарите на горната грешка е полезно заобиколно решение се споменава с помощта на exists
Затова използвайте два пъти sqlRestriction
с exists
и корелирана подзаявка, филтрираща правилната категория. Ще получите само компании свързани с двете категории.
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 ) );
Това води до следната заявка, която предоставя правилния резултат
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 = ?)