Oracle
 sql >> Database >  >> RDS >> Oracle

Ibernazione Crea criteri per unire due volte la stessa tabella:ho provato l'approccio 2 con 2 errori di differenza

C'è un vecchio bug di Hibernate HHH-879 sul problema di org.hibernate.QueryException: duplicate association path aperto nel 2005 e ancora aperto...

L'altro problema è stato risolto senza soluzione HHH-7882

Quindi l'opzione 1) non è adatta.

Ma nei commenti del bug di cui sopra un'utile soluzione alternativa è menzionato usando exists

Quindi usa due volte sqlRestriction con exists e una sottoquery correlata che filtra la categoria corretta. Avrai solo aziende collegato ad entrambe le categorie.

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

Questo porta alla seguente query che fornisce il risultato corretto

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