繁体   English   中英

是否可以使Hibernate 3.1为子实体生成左外部联接?

[英]Is it possible to make Hibernate 3.1 generate a left outer join for a child entity?

编辑以反映先前的遗漏:我想定义一个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的关系。

这将生成左外部联接。

将与我的非常相似的其他stackoverflow.com问题的答案拼凑在一起,我找到了解决方案:

@Jay的答案是朝着正确方向迈出的一步(如果我的问题的原始版本一夜之间就是我真正要问的问题,那将是正确的答案,并且通过@Jay的评论,我意识到我的问题是不完整的。使用@Jay的答案以及对我的HQL的以下更改:

...
SELECT i.inventoryId,i.name,q.quantity FROM Item i LEFT OUTER JOIN i.qoh as q
...

代替

...
SELECT i.inventoryId,i.name,i.qoh.quantity FROM Item i
...

基本上,将LEFT OUTER JOIN引用添加到要告诉Hibernate在填充该字段时使用LEFT OUTER JOIN的Item中的字段,从而允许空值。 将字段设为可选并不会自动使它在每个查询中都成为LEFT OUTER JOIN,而只是防止在HQL中使用LEFT OUTER JOIN时引发错误。

如果我错了,请纠正我。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM