gpt4 book ai didi

java - JPQL 和 HQL 如何结合 INNER JOIN 和 LEFT JOIN

转载 作者:行者123 更新时间:2023-11-29 05:09:40 24 4
gpt4 key购买 nike

我正在尝试实现 HQL 查询。我已经能够在 SQL 中实现它——我对它更熟悉一些。我一直挂断的是 INNER JOINS。

类是这样实现的...

class Item

class Component extends Item
private Item parentItem;

class Assembly extends Item

到目前为止,这就是我的 HQL...

SELECT
item.blah,
comp.blah,
assembly.blah
FROM
Component comp
LEFT OUTER JOIN comp.parentItem item,
Assembly assembly
WHERE
item.parentItem = assembly

这有效 - 除了我需要最后三行是 LEFT OUTER JOIN 而不是互斥条件。我已尝试通过多种方式实现这一点 - 但我一直遇到映射问题。

<hibernate-mapping>
<class lazy="false" name="com.kcp.common.domain.inventory.Item"
table="W_INV_INV_ITEM" where="deleted=0">

<joined-subclass lazy="false" name="com.kcp.common.domain.inventory.Component" table="W_INV_INV_COMPONENT">
<key>
<column name="ID">
<comment>Primary and foreign key to W_INV_INV_ITEM.</comment>
</column>
</key>
<many-to-one cascade="all" class="com.kcp.common.domain.inventory.Item" name="parentItem" outer-join="true">
<column name="PARENT_ITEM_ID">
<comment>Foreign key identifying the item to which this component is assembled.</comment>
</column>
</many-to-one>
</joined-subclass>

<joined-subclass lazy="false" name="com.kcp.common.domain.inventory.Assembly" table="W_INV_INV_MAJOR_ASSEMBLY">
<key>
<column name="ID">
<comment>Primary and foreign key to W_INV_INV_ITEM.</comment>
</column>
</key>
</class>
</hibernate-mapping>

另外 - 我让它像这样在 SQL 中工作......

FROM
DBO.W_INV_INV_ITEM item
INNER JOIN DBO.W_INV_INV_COMPONENT comp ON item.id = comp.id
LEFT OUTER JOIN DBO.W_INV_INV_ITEM parentInv ON comp.PARENT_ITEM_ID = parentInv.id
LEFT OUTER JOIN DBO.W_INV_INV_MAJOR_ASSEMBLY parentMA ON comp.PARENT_ITEM_ID = parentMA.id

最佳答案

如果您在 WHERE 子句中包含 LEFT JOIN 条件,它将充当 INNER JOIN。

如果 item 是可选的,那么 item.parentItem 也必须是可选的,因此您需要将其包含在 LEFT JOIN 中。

尝试这样的事情:

SELECT
i.blah,
c.blah
FROM Component c
LEFT JOIN c.parentItem i
LEFT JOIN i.parentItem p
WHERE
p is null or p.class = 'Assembly'

关于java - JPQL 和 HQL 如何结合 INNER JOIN 和 LEFT JOIN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29091566/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com