Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Hibernate Create Criteria, aby dwukrotnie dołączyć do tego samego stołu — wypróbowano 2 podejście z błędem 2 różnic

Istnieje stary błąd Hibernate HHH-879 dotyczący problemu org.hibernate.QueryException: duplicate association path otwarty 2005 i nadal otwarty...

Inny problem jest zamknięty bez rozwiązania HHH-7882

Tak więc opcja 1) jest raczej nieodpowiednia.

Ale w komentarzach do powyższego błędu przydatne obejście jest wspomniany przy użyciu exists

Więc użyj dwukrotnie sqlRestriction z exists oraz skorelowane podzapytanie filtrujące właściwą kategorię. Otrzymasz tylko firmy połączone z obiema kategoriami.

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 ) );

Prowadzi to do następującego zapytania, które zapewnia poprawny wynik

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. Jak przekazać listę obiektów Java do procedury składowanej Oracle za pomocą MyBatis?

  2. Kolejność Oracle SQL według problemów z podzapytaniami!

  3. Funkcja NLS_CHARSET_ID() w Oracle

  4. Struktura i typy bloków Oracle PLSQL

  5. Parametry Oracle z instrukcją IN?