【问题标题】:Convert left join SQL query to HQL将左连接 SQL 查询转换为 HQL
【发布时间】:2015-12-21 08:36:55
【问题描述】:

我有以下 SQL 查询,想知道如何将其转换为 HQL。语法如何?

select pr.PROD_ID, pr.ORG_UNIT_ID, pr.QTY, pr.ID from PROD_ST pr
left join
(select * from ORG_UNIT where code like '25%') org
on org.id = pr.ORG_UNIT_ID
where org.id = pr.ORG_UNIT_ID

【问题讨论】:

  • entityManager.createQuery("select pr.PROD_ID, pr.ORG_UNIT_ID, pr.QTY, pr.ID from PROD_ST pr" + "left join" + "(select * from ORG_UNIT where code like :value ) org" + "on org.id = pr.ORG_UNIT_ID" + "where org.id = pr.ORG_UNIT_ID", OrgUnit.class);

标签: sql hibernate hql


【解决方案1】:

首先,你的SqlLEFT JOIN,真的是INNER JOIN,因为在WHERE 子句中你放了:

org.id = pr.ORG_UNIT_ID

第二个,在您的 SELECT 字段列表中,您仅显示 pr 字段,因此您可以像这样使用 EXISTS 函数转换您的 LEFT JOIN(我假设您为每个表都有一个同名的实体):

SELECT pr.PROD_ID, pr.ORG_UNIT_ID, pr.QTY, pr.ID from PROD_ST pr
WHERE EXISTS(
    SELECT 'ORG_UNIT'
    FROM ORG_UNIT org
    WHERE org.code like '25%'
    AND org.id = pr.ORG_UNIT_ID
)

【讨论】:

  • 我无法通过用您的查询修改我的查询来检索预期结果。但是,我的问题不是更改我的查询,而是将其转换为休眠查询。我将编辑并编写我现在尝试的代码,以便您能够看到它
猜你喜欢
  • 2013-07-02
  • 2014-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多