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=?
刪除的時候最好刪除從表,刪除主表會先查詢下主表,在聯合查詢下。