Hibernate對映詳解--一對一唯一外來鍵關聯對映
人與身份證的實體關係圖
最後生成表關係圖
下面來看具體程式碼的實現。
實體類實現:
public class Person { privateintid; private Stringname; private IdCardidCard;//關聯物件 …省略get,set方法 } |
public class IdCard { privateintid; private StringcardNo; …省略get,set方法 } |
看一下對映檔案
Person.hbm.xml <hibernate-mapping> <classname="com.bjpowernode.hibernate.Person" <idname="id"> <generatorclass="native"/> </id> <propertyname="name"/> <!--多對一關聯,但是後面加一個unique唯一的限定,則確保了關聯欄位取值的唯一性 --> <many-to-onename="idCard"unique="true"/> </class> </hibernate-mapping> |
IdCard.hbm.xml <hibernate-mapping> < <idname="id"> <generatorclass="native"/> </id> <propertyname="cardNo"/> </class> </hibernate-mapping> |
普通的實體類對映。從上面可以看出,一對一唯一外來鍵對映的重點就是Person一端的many-to-one標籤的設定。同一對一主鍵關聯對映一樣,看完單向之後,我們來看一下一對一唯一外來鍵對映的雙向關聯。同樣拿人與身份證進行舉例。
實體類實現:
public class Person { privateintid; private Stringname; private IdCardidCard; //關聯屬性 …省略get,set方法 } |
public class IdCard { privateintid; private StringcardNo; private Personperson; //關聯屬性 …省略get,set方法 } |
對應的對映檔案:
Person.hbm.xml <hibernate-mapping> <classname="com.bjpowernode.hibernate.Person"table="t_person"> <idname="id"> <generatorclass="native"/> </id> <propertyname="name"/> <many-to-onename="idCard"unique="true"/> </class> </hibernate-mapping> |
IdCard.hbm.xml <hibernate-mapping> <class name="com.bjpowernode.hibernate.IdCard"table="t_idCard"> <idname="id"> <generatorclass="native"/> </id> <propertyname="cardNo"/> <!--property-ref為關係欄位的名稱 --> <one-to-onename="person"property-ref="idCard"/> </class> </hibernate-mapping> |
一對一唯一外來鍵關聯對映雙向採用<one-to-one>標籤對映,而且是必須指定。這也是在對映檔案的實現上他們唯一的區別。