首页 > 解决方案 > 如何在 HQL 中编写子连接

问题描述

我是 hibernate 和 HQL 的新手,想将此 sql 转换为 HQL 查询无法将带有 sub select 的 Sub Join 转换为 hibernate 中的 HQL

     SELECT  m.ID, SUM(CASE WHEN pl.IN_OUT = 1
                       THEN pl.INP
                  ELSE 0 END + 
                  CASE WHEN MRL.IN_OUT = 1
                       THEN MRL.INP
                  ELSE 0 END +
                  CASE WHEN sl.IN_OUT = 1
                       THEN sl.INP
                  ELSE 0 END) INP

FROM   MATERIAL                      AS m
      LEFT JOIN (SELECT pl1.MATERIAL_ID, 
                   pl1.IN_OUT, 
                   pl1.WAREHOUSE_ID,
                   SUM(CASE WHEN PL1.IN_OUT = 1 THEN PL1.QUANTITY ELSE 0 END) 
        INP, 
                   SUM(CASE WHEN PL1.IN_OUT = 2 THEN PL1.QUANTITY ELSE 0 END) 
          OUTP 
            FROM PURCHASE_LINE pl1
            GROUP BY pl1.MATERIAL_ID, pl1.IN_OUT, pl1.WAREHOUSE_ID
      ) as pl ON PL.MATERIAL_ID = M.ID AND PL.WAREHOUSE_ID = W.ID

     WHERE m.ID = 273607     
  GROUP BY m.ID

标签: hibernatespring-boothql

解决方案


HQL 和 JPQL 不支持派生表。您可以将派生表转换为几个相关的子查询,但我认为编写本机 SQL 查询会更好。


推荐阅读