Java 如何在加入HQL中应用2个条件

Java 如何在加入HQL中应用2个条件,java,sql,hibernate,orm,hql,Java,Sql,Hibernate,Orm,Hql,如何在加入HQL中应用2个条件?我想为以下查询编写HQL: 透水HQL: StringBuffer sb = new StringBuffer(); sb.append("from Hardwarekomponente h"); sb.append(" left join fetch h.hwCategory4 c4"); sb.append(" left join fetch c4.hwCategory3 c3"); sb.app

如何在加入HQL中应用2个条件?我想为以下查询编写HQL:

透水HQL:

StringBuffer sb = new StringBuffer();
        sb.append("from Hardwarekomponente h");
        sb.append(" left join fetch h.hwCategory4 c4");
        sb.append(" left join fetch c4.hwCategory3 c3");
        sb.append(" where h.konto.sisnetConfigSwitch = 1");
        sb.append(" and h.technischeNr is not null");
        sb.append(" and upper(c3.hwCategory3) like :cat3");
以前的SQL:

SELECT  *
FROM     HARDWAREKOMPONENTE h 
         INNER JOIN V_MD_HARDWARE_CAT4 c4 ON h.Hw_Kategorie4_Id=c4.Hardware_Cat4_Id 
         INNER JOIN V_MD_HARDWARE_CAT3 c3 ON c4.Hardware_Cat3_Id=c3.Hardware_Cat3_Id 
         LEFT OUTER JOIN V_MD_ACCOUNT k ON h.Konto_Id=k.Account_Id  
WHERE    (h.Technische_Nr is not null) and (upper(c3.Hardware_Cat3) like '%SWITCH%') and k.Sisnet_Config_Switch = 1;
但现在由于一些更改,我想将2个条件与join一起移动,以获得前一个查询没有提供的一些输出:

新的HQL(我正在尝试,但在运算符中失败):

新SQL:

SELECT  *
FROM     HARDWAREKOMPONENTE h 
         INNER JOIN V_MD_HARDWARE_CAT4 c4 ON h.Hw_Kategorie4_Id=c4.Hardware_Cat4_Id 
         INNER JOIN V_MD_HARDWARE_CAT3 c3 ON c4.Hardware_Cat3_Id=c3.Hardware_Cat3_Id AND (upper(c3.Hardware_Cat3) like '%SWITCH%')
         LEFT OUTER JOIN V_MD_ACCOUNT k ON h.Konto_Id=k.Account_Id AND k.Sisnet_Config_Switch = 1
WHERE    (h.Technische_Nr is not null);

因此,我的问题是如何添加或告诉Hibernate在加入时添加条件?

在第一个
with
语句中,您指的是一个尚未定义的别名(
c3

我将按以下方式构造查询:

StringBuffer sb = new StringBuffer();
  sb.append("from Hardwarekomponente h ");
  sb.append(" left join h.konto k with (k.sisnetConfigSwitch = 1)");  
  sb.append(" left join h.hwCategory4 c4");
  sb.append(" left join c4.hwCategory3 c3 with (upper(c3.hwCategory3) like :cat3) ");
  sb.append(" where ");
  sb.append("  h.technischeNr is not null ");

我仍然收到
•发生意外错误。详细信息:获取的关联上不允许with子句;use filters
您是否可以删除fetch子句并延迟加载事务方法中的依赖项?我是否可以知道原因,为什么fetch不起作用?Hql不支持with语句和eager fetch。如果不能应用延迟加载,那么您将只剩下如错误所示的过滤器。但是你没有这个问题,酷。谢谢你的解释:)
StringBuffer sb = new StringBuffer();
  sb.append("from Hardwarekomponente h ");
  sb.append(" left join h.konto k with (k.sisnetConfigSwitch = 1)");  
  sb.append(" left join h.hwCategory4 c4");
  sb.append(" left join c4.hwCategory3 c3 with (upper(c3.hwCategory3) like :cat3) ");
  sb.append(" where ");
  sb.append("  h.technischeNr is not null ");