hibernate之constrained詳解

lazy(可選 — 默認爲 proxy):默認情況下,單點關聯是經過代理的。lazy="no-proxy"指定此屬性應該在實例變量第一次被訪問時應該延遲抓取(fetche lazily)(需要運行時字節碼的增強)。lazy="false"指定此關聯總是被預先抓取。注意,如果constrained="false", 不可能使用代理,Hibernate會採取預先抓取

constrained默認值爲false

constrained只能在one-to-one的映射中使用,(一般在主表的映射中,有外鍵的那個表)。如果constrained=true,則表明存在外鍵與關聯表對應,並且關聯表中肯定存在對應的鍵與其對應, 另外該選項最關鍵的是影響save和delete的先後順序。例如增加的時候,如果constainted=true,則會先增加關聯表,然後增加本表。刪除的時候反之。

one-to-one的單向關聯中,如果constrained=false,則會在查詢時就全部取出來,用left outer join的方式。如果constrained=true,hibernate即會延遲加載sql,只把主表的查出來,等有用到關聯表的再發sql取。

one-to-one的雙向關聯中,必須設置constrained=true,要不然會有重複數據讀,如2個表user,car;在位false時sql如下:select * from user a left outer join car b on a.id=b.id left outer join on user c on a.id=c.id where a.id=? 刪除的時候最好刪除從表,刪除主表會先查詢下主表,在聯合查詢下。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章