Hibernate一对一 主键关联映射

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

*两个对象之间是一对一的关系,如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;  
    }  
}  
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.

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;  
    }  
}  
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.

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>  
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.

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> 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.

原文链接: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-09-22 09:55:58

Hibernate实例

2009-06-24 15:49:54

Entity Bean一对一映射

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技术栈公众号