【问题标题】:how can I apply 2 conditions in join in HQL如何在 HQL 中加入 2 个条件
【发布时间】:2018-06-12 00:39:27
【问题描述】:

如何在 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(我正在尝试,但使用运算符失败):

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

新 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 添加条件以及加入?

【问题讨论】:

    标签: java sql hibernate orm hql


    【解决方案1】:

    在第一个 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 ");
    

    【讨论】:

    • 我仍然收到•An unexpected error occured. Details: with-clause not allowed on fetched associations; use filters
    • 你能在事务方法中删除 fetch 子句并延迟加载依赖项吗?
    • 我能知道原因吗,为什么 fetch 不起作用?
    • Hql 不支持 with 语句以及急切获取。如果无法应用延迟加载,那么您将留下错误所说的过滤器。但你没有这个问题
    • 酷。谢谢你的解释:)
    猜你喜欢
    • 1970-01-01
    • 2013-10-03
    • 2021-01-27
    • 2015-10-05
    • 2015-09-02
    • 2011-05-21
    • 2016-03-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多