Có một lỗi Hibernate cũ HHH-879 về sự cố của org.hibernate.QueryException: duplicate association path
mở năm 2005 và vẫn mở ...
Vấn đề khác bị đóng mà không có giải pháp HHH-7882
Vì vậy, tùy chọn 1) không phù hợp.
Nhưng trong các nhận xét của lỗi ở trên, một giải pháp thay thế hữu ích được đề cập bằng cách sử dụng exists
Vì vậy, hãy sử dụng hai lần sqlRestriction
với exists
và một truy vấn con tương quan lọc danh mục trình chiếu. Bạn sẽ chỉ nhận được công ty được kết nối với cả hai danh mục.
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 ) );
Điều này dẫn đến truy vấn sau đây cung cấp kết quả chính xác
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 = ?)