我正在尝试实现一个HQL查询。我已经能够在SQL中实现它--我对它比较熟悉。我一直纠结于内部连接。
这些类是这样实现的……
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这是可行的-除了我需要最后三行是一个左外连接而不是一个互斥的条件。我尝试过以多种方式实现这一点--但我总是遇到映射问题。
<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发布于 2015-03-17 15:10:16
如果在WHERE子句中包含左联接条件,它将充当内联接。
如果item是可选的,那么item.parentItem也必须是可选的,所以您需要将其包含在左连接中。
尝试如下所示:
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'https://stackoverflow.com/questions/29091566
复制相似问题