1.One2One 主鍵單向關聯
兩個實體id保持相同,可避免多餘字段創建
維護方 主鍵 採用foreign 生成器,並且使用one-to-one 標籤
constrained只能在one-to-one的映射中使用,(一般在主表的映射中,有外鍵的那個表)。如果constrained=true, 則表明存在外鍵與關聯表對應,並且關聯表中肯定存在對應的鍵與其對應, 另外該選項最關鍵的是影響save和delete的先後順序。例如增加的時候,如果constainted=true,則會先增加關聯表,然後增加本表。 刪除的時候反之。
one-to-one的單向關聯中,如果constrained=false,則會在查詢時就全部取出來,用left outer join的方式。如果constrained=true,hibernate即會延遲加載sql,只把主表的查出來,等有用到關聯表的再發sql取。
維護方 配置
<classname="Person"table="t_person">
<idname="id"column="id"type="java.lang.Integer">
<generatorclass="foreign">
<paramname="property">idcard</param>
</generator>
</id>
<propertyname="name"column="name"type="java.lang.String"></property>
《
<!-- constrained 表明當前主鍵作爲外鍵與t_idCard關聯表對應 -->
<one-to-onename="idcard" constrained="true"></one-to-one>
</class>
非維護方配置
<classname="IdCard"table="t_idCard">
<idname="id"column="id"type="java.lang.Integer">
<generatorclass="native"></generator>
</id>
<propertyname="idCardNo"type="java.lang.String"></property>
</class>
2.One2One 主鍵雙向關聯
主鍵雙向關聯和單向配置差不多,主要區別是在非維護方增加one-to-one 標籤就行。
維護方 配置
<classname="Person"table="t_person">
<idname="id"column="id"type="java.lang.Integer">
<generatorclass="foreign">
<paramname="property">idcard</param>
</generator>
</id>
<propertyname="name"column="name"type="java.lang.String"></property>
《
<!-- constrained 表明當前主鍵作爲外鍵與t_idCard關聯表對應 -->
<one-to-onename="idcard" constrained="true"></one-to-one>
</class>
非維護方配置
<classname="IdCard"table="t_idCard">
<idname="id"column="id"type="java.lang.Integer">
<generatorclass="native"></generator>
</id>
<propertyname="idCardNo"type="java.lang.String"></property>
<one-to-onename="person" ></one-to-one>
</class>