Ada bug Hibernate lama HHH-879 pada masalah org.hibernate.QueryException: duplicate association path
dibuka tahun 2005 dan masih buka...
Masalah lain ditutup tanpa solusi HHH-7882
Jadi opsi 1) agak kurang cocok.
Tetapi dalam komentar bug di atas, solusi yang berguna disebutkan menggunakan exists
Jadi gunakan dua kali sqlRestriction
dengan exists
dan subquery berkorelasi memfilter kategori yang tepat. Anda hanya akan mendapatkan perusahaan terhubung ke kedua kategori.
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 ) );
Ini mengarah ke kueri berikut yang memberikan hasil yang benar
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 = ?)