Hibernate一对一 主键关联映射

开发 后端
本文将介绍两个对象之间是一对一的关系,如Person-IdCard(人-身份证号)和两种策略可以实现一对一的关联映射。

*两个对象之间是一对一的关系,如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中内存溢出的解决办法
责任编辑:林师授 来源: fengxuezhiye的博客
相关推荐

2012-02-08 13:34:08

HibernateJava

2009-06-03 16:27:27

Hibernate一对一关系

2009-06-03 16:18:16

Hibernate关系代码实例

2009-06-04 16:14:22

Hibernate一对Hibernate一对Hibernate多对

2009-08-17 10:34:51

NHibernate一

2009-09-23 10:37:50

Hibernate一对

2009-09-23 10:57:02

Hibernate一对

2009-06-24 15:49:54

Entity Bean一对一映射

2009-09-22 09:55:58

Hibernate实例

2009-07-21 17:31:39

iBATIS一对多映射

2009-06-26 10:15:54

面试HR

2009-06-04 10:34:19

Hibernate一对一对多关系配置

2009-12-23 09:31:11

宽带路由上网故障

2012-02-03 10:07:04

HibernateJava

2010-04-15 09:09:02

Hibernate

2012-03-13 16:29:54

Between情侣移动应用

2013-10-12 16:41:01

微软微软CEO鲍尔默

2009-09-25 12:59:52

Hibernate映射

2009-10-22 18:24:35

数字化教学教育

2012-12-14 09:54:31

英特尔数字化学习年会
点赞
收藏

51CTO技术栈公众号