sql >> Databasteknik >  >> RDS >> Oracle

Viloläge Skapa kriterier för att gå med i samma tabell två gånger - försökte 2 tillvägagångssätt med 2 skillnadsfel

Det finns ett gammalt Hibernate-fel HHH-879 om problemet med org.hibernate.QueryException: duplicate association path öppnade 2005 och fortfarande öppet...

Annat problem är stängt utan lösning HHH-7882

Så alternativ 1) är inte lämpligt.

Men i kommentarerna till ovanstående bugg en användbar lösning nämns med exists

Så använd två gånger sqlRestriction med exists och en korrelerad underfråga som filtrerar den korrekta kategorin. Du får bara företag kopplade till båda kategorierna.

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

Detta leder till följande fråga som ger rätt resultat

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. Hur man importerar en excel-fil till en MySQL-databas

  2. Förstå vikten av minnesinställning i SQL Server

  3. Använda Microsoft Access-data i Wolfram Mathematica

  4. GROUP BY och COUNT i PostgreSQL