[英]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.