Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Hibernate Tạo tiêu chí để tham gia cùng một bảng hai lần - đã thử 2 cách tiếp cận với 2 lỗi khác biệt

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 = ?)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ORA-01264:Không thể tạo tên tệp logfile

  2. Lỗi SQL:ORA-01861:chữ không khớp với chuỗi định dạng 01861

  3. Tạo chèn sql vào cho Oracle

  4. Phân trang với Oracle

  5. Lược đồ APPLICSYSPUB