编辑以反映先前的遗漏:
我想定义一个0到1行的关系,其中子行永远不会超过1个:
...
@JoinColumn(name="INVENTORY_ID", referencedColumnName="INVENTORY_ID")
@OneToOne
private QOH qoh;
...
所以我的问题是我尝试了所有不使用@JoinColumn而不使用@OneToOne的方法,并且不管我在选择字段子集时执行Hibernate生成的SQL导致内部联接,这意味着没有QOH记录的Item记录不返回:
...
SELECT i.inventoryId,i.name,i.qoh.quantity FROM Item i;
...
如果我对数据库有完全控制权,则无论何时创建Item,我都将强制创建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
...
最佳答案
在您的Item实体中尝试一下,
@ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER, optional = true)
private QOH qoh;
实际上,这会在Item和QOH之间创建1到0..1的关系。
这将生成左外部联接。