程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> J2EE >> Hibernate一對一 主鍵關聯映射

Hibernate一對一 主鍵關聯映射

編輯:J2EE

*兩個對象之間是一對一的關系,如Person-IdCard(人-身份證號)

*有兩種策略可以實現一對一的關聯映射

》主鍵關聯:即讓兩個對象具有相同的主鍵值,以表明它們之間的一一對應關系;數據庫不會有額外的字段來維護它們之間的關系,僅通過表的主鍵來關聯

》唯一外鍵關聯:外鍵關聯本來是用於多對一的配置,但是如果加上唯一的限制之後,也可以用來表示一對一關聯映射

1.主鍵關聯映射(單向)

實例場景:人-->身份證號(Person-->IdCard),從IdCard看不到Person對象

對象模型:

IdCard實體類:

  1. public class IdCard {  
  2.     private int id;   
  3.     private String cardNo;  
  4.  
  5.     public int getId() {  
  6.         return id;  
  7.     }  
  8.     public void setId(int id) {  
  9.         this.id = id;  
  10.     }  
  11.     public String getCardNo() {  
  12.         return cardNo;  
  13.     }  
  14.     public void setCardNo(String cardNo) {  
  15.         this.cardNo = cardNo;  
  16.     }  
  17. }  

Person實體類:

  1. public class Person {  
  2.     private int id;   
  3.     private String name;      
  4.     private IdCard idCard;//持有IdCard對象的引用  
  5.     public int getId() {  
  6.         return id;  
  7.     }  
  8.     public void setId(int id) {  
  9.         this.id = id;  
  10.     }  
  11.     public String getName() {  
  12.         return name;  
  13.     }  
  14.     public void setName(String name) {  
  15.         this.name = name;  
  16.     }  
  17.     public IdCard getIdCard() {  
  18.         return idCard;  
  19.     }  
  20.     public void setIdCard(IdCard idCard) {  
  21.         this.idCard = idCard;  
  22.     }  
  23. }  

IdCard實體映射文件:

  1. <hibernate-mapping>  
  2.     <class name="com.cn.hibernate.IdCard" table="t_idcard">  
  3.         <id name="id" column="id">  
  4.             <generator class="native"/>  
  5.         </id>  
  6.         <property name="cardNo"/>  
  7.     </class>  
  8. </hibernate-mapping>  

Person實體映射文件:

  1. <hibernate-mapping>  
  2.     <class name="com.cn.hibernate.Person" table="t_person">  
  3.         <id name="id" column="id">  
  4.             <!--  
  5.                 因為主鍵不是自己生成的,而是作為一個外鍵(來源於其它值),所以使用foreign生成策略  
  6.                 foreign:使用另外一個相關聯的對象的標識符,通常和<one-to-one>聯合起來使用。  
  7.                 再使用元素<param>的屬性值指定相關聯對象(這裡Person相關聯的對象為idCard,則標識符為idCard的id)為了能夠在加載person數據同時加載IdCard數據,所以需要使用一個標簽<one-to-one>來設置這個功能。  
  8.              -->  
  9.             <generator class="foreign">  
  10.                 <!-- 元素<param>屬性name的值是固定為property -->  
  11.                 <param name="property">idCard</param>  
  12.             </generator>  
  13.         </id>  
  14.         <property name="name"/>  
  15.         <!-- <one-to-one>標簽  
  16.         表示如何加載它的引用對象(這裡引用對象就指idCard這裡的name值是idCard),同時也說是一對一的關系。  
  17.         默認方式是根據主鍵加載(把person中的主鍵取出再到IdCard中來取相關IdCard數據。)  
  18.  我們也說過此主鍵也作為一個外鍵引用 了IdCard,所以需要加一個數據庫限制(外鍵約束)constrained="true" 
  19.          -->  
  20.         <one-to-one name="idCard" constrained="true"/>    
  21. </class>  
  22. </hibernate-mapping> 

原文鏈接:http://blog.csdn.Net/fengxuezhiye/article/details/7374584

【編輯推薦】

  1. Hibernate的基本標簽和映射
  2. Java集合框架總結:Set接口的使用
  3. Java的位移運算巧方法
  4. Java7的一個新類JLayer:裝飾的Swing組件
  5. 關於Java中內存溢出的解決辦法
【責任編輯:小林 TEL:(010)68476606】
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved