sql >> Database >  >> RDS >> Oracle

Slaapstand Creëer criteria om twee keer aan dezelfde tafel deel te nemen - geprobeerd 2-benadering met 2-verschilfout

Er is een oude Hibernate-bug HHH-879 op het probleem van org.hibernate.QueryException: duplicate association path 2005 geopend en nog steeds open...

Ander probleem is gesloten zonder oplossing HHH-7882

Dus optie 1) is eerder niet geschikt.

Maar in de opmerkingen van de bovenstaande bug een handige oplossing wordt vermeld met exists

Dus gebruik tweemaal sqlRestriction met exists en een gecorreleerde subquery die de juiste categorie filtert. U krijgt alleen bedrijven verbonden met beide categorieën.

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

Dit leidt tot de volgende query die het juiste resultaat oplevert

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. Hoe PostgreSQL-enum in kaart te brengen met JPA en Hibernate

  2. Waar is mijn ongeldige teken (ORA-00911)

  3. 12c Gegevensbestanden online verplaatsen

  4. Configuratietabellen gebruiken om de werkelijke workflow te definiëren