Hibernate 映射關係 ---One2One 主鍵關聯

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>




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