org.hibernate.QueryException: duplicate association path
の問題に関する古いHibernateバグHHH-879があります 2005年にオープンし、まだオープンしています...
その他の問題は解決策なしでクローズされますHHH-7882
したがって、オプション1)はかなり適切ではありません。
しかし、上記のバグのコメントでは、有用な回避策 exists
を使用して言及されています
したがって、sqlRestriction
を2回使用します 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 = ?)