*兩個對象之間是一對一的關系,如Person-IdCard(人-身份證號)
*有兩種策略可以實現一對一的關聯映射
》主鍵關聯:即讓兩個對象具有相同的主鍵值,以表明它們之間的一一對應關系;數據庫不會有額外的字段來維護它們之間的關系,僅通過表的主鍵來關聯
》唯一外鍵關聯:外鍵關聯本來是用於多對一的配置,但是如果加上唯一的限制之後,也可以用來表示一對一關聯映射
1.主鍵關聯映射(單向)
實例場景:人-->身份證號(Person-->IdCard),從IdCard看不到Person對象
對象模型:
IdCard實體類:
- public class IdCard {
- private int id;
- private String cardNo;
- public int getId() {
- return id;
- }
- public void setId(int id) {
- this.id = id;
- }
- public String getCardNo() {
- return cardNo;
- }
- public void setCardNo(String cardNo) {
- this.cardNo = cardNo;
- }
- }
Person實體類:
- public class Person {
- private int id;
- private String name;
- private IdCard idCard;//持有IdCard對象的引用
- public int getId() {
- return id;
- }
- public void setId(int id) {
- this.id = id;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public IdCard getIdCard() {
- return idCard;
- }
- public void setIdCard(IdCard idCard) {
- this.idCard = idCard;
- }
- }
IdCard實體映射文件:
- <hibernate-mapping>
- <class name="com.cn.hibernate.IdCard" table="t_idcard">
- <id name="id" column="id">
- <generator class="native"/>
- </id>
- <property name="cardNo"/>
- </class>
- </hibernate-mapping>
Person實體映射文件:
- <hibernate-mapping>
- <class name="com.cn.hibernate.Person" table="t_person">
- <id name="id" column="id">
- <!--
- 因為主鍵不是自己生成的,而是作為一個外鍵(來源於其它值),所以使用foreign生成策略
- foreign:使用另外一個相關聯的對象的標識符,通常和<one-to-one>聯合起來使用。
- 再使用元素<param>的屬性值指定相關聯對象(這裡Person相關聯的對象為idCard,則標識符為idCard的id)為了能夠在加載person數據同時加載IdCard數據,所以需要使用一個標簽<one-to-one>來設置這個功能。
- -->
- <generator class="foreign">
- <!-- 元素<param>屬性name的值是固定為property -->
- <param name="property">idCard</param>
- </generator>
- </id>
- <property name="name"/>
- <!-- <one-to-one>標簽
- 表示如何加載它的引用對象(這裡引用對象就指idCard這裡的name值是idCard),同時也說是一對一的關系。
- 默認方式是根據主鍵加載(把person中的主鍵取出再到IdCard中來取相關IdCard數據。)
- 我們也說過此主鍵也作為一個外鍵引用 了IdCard,所以需要加一個數據庫限制(外鍵約束)constrained="true"
- -->
- <one-to-one name="idCard" constrained="true"/>
- </class>
- </hibernate-mapping>
原文鏈接:http://blog.csdn.Net/fengxuezhiye/article/details/7374584
【編輯推薦】