【发布时间】:2014-04-03 12:09:52
【问题描述】:
已编辑以反映之前的遗漏: 我想定义一个 0 到 1 行的关系,其中永远不会有超过 1 个子行:
...
@JoinColumn(name="INVENTORY_ID", referencedColumnName="INVENTORY_ID")
@OneToOne
private QOH qoh;
...
所以我的问题是我已经尝试了各种方法来使用 @OneToOne 而不使用 @JoinColumn 并使用它,无论我做什么,在选择字段子集时由 Hibernate 生成的 SQL 都会导致内部连接,这意味着具有no QOH 记录不返回:
...
SELECT i.inventoryId,i.name,i.qoh.quantity FROM Item i;
...
如果我可以完全控制数据库,我会在任何时候创建项目时强制创建 QOH 记录,但我无法控制数据库或对它的访问。 Hibernate 可以为子实体执行此操作吗?:
...
SELECT ... FROM Item i LEFT OUTER JOIN QOH q ON q.INVENTORY_ID = i.INVENTORY_ID
...
代替:
...
SELECT ... FROM Item i, QOH q WHERE q.INVENTORY_ID = i.INVENTORY_ID
...
【问题讨论】:
-
除了生成的查询类型之外,您是否能够达到预期的结果?如果不行,你可以粘贴代码吗?
-
@Jay - 不,我只能通过从实体中删除子关系并执行两个查询来实现我想要的结果。没有 QOH 记录的子关系项目不会被退回。当它不存在时,我想要一个空 QOH 子,而当它存在时,我想要一个实例化的 QOH。当QOH丢失时,我尝试的所有方法都没有记录,也就是说,内连接而不是外连接。
-
你试过
@OneToOne(optional = true)吗? -
如果您发布代码会更容易。
-
@Jay - 我做到了,我只是省略了与问题无关的所有内容。 qoh 是实体 Item 上的一个字段,但这无关紧要。 QOH 是一个实体。当我从项目 i 中选择 i 时,它不会返回任何没有相应 QOH 的项目
标签: java sql hibernate hql java-ee-6