簡體   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