Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Hibernate Buat Kriteria untuk bergabung dengan tabel yang sama dua kali - mencoba 2 pendekatan dengan 2 kesalahan perbedaan

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kesalahan login Sqlplus saat menggunakan variabel bash:SP2-0306:Opsi tidak valid

  2. OracleParameter dan Klausa IN

  3. BEGIN - AKHIR transaksi blok atom di PL/SQL

  4. Pivot Oracle dengan subquery

  5. oracle mengonversi waktu zaman unix menjadi tanggal