【Hibernate】一对一唯一外键关联映射

来源:互联网 发布:好学近乎知全文翻译 编辑:程序博客网 时间:2024/05/22 08:05
【回顾】
    在上篇博客中学习的是通过主键进行实体间一对一关系的映射,但其不易扩展,一般采用的方法是本篇博客中学习的内容,即:唯一外键关联映射。
【一对一唯一外键关联】
    1. 原理配置:一对一唯一外键关联映射其实是多对一的特例。采用<many-to-one>标签来映射。
    2. 实体类代码:与单向主键关联一致,此处略。
    3. 实体配置映射文件:
Person.hbm.xml:<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC     "-//Hibernate/Hibernate Mapping DTD 3.0//EN"    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping>    <class name="com.bjpowernode.hibernate.Person" table="t_person">        <id name="id">        <!-- 任意生成策略都行 -->              <generator class="native"/>        </id>        <property name="name"/>        <!-- 一对一为多对一的特例,只是外键是唯一的。 -->        <many-to-one name="idCard" unique="true"/>    </class></hibernate-mapping>  IdCard.hbm.xml:<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC     "-//Hibernate/Hibernate Mapping DTD 3.0//EN"    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping>    <class name="com.bjpowernode.hibernate.IdCard" table="t_idCard">        <id name="id">            <generator class="native"/>        </id>        <property name="cardNo"/>    </class></hibernate-mapping> 
    4. 小结 
        对于一对一唯一外键关联映射,其实和多对一关联映射差别不大,这是原来在多对一对象中的外键是可以重复的,而一对一中将unique设置true,保证其唯一性,便是一对一的关联关系。
    上篇博客中包含单向和双向两种设置,同样地,对于唯一外键方法,也是有单向和双向之分。
    下面就看看双向关联有着怎样的配置变化。
    1. 原理配置:采用<one-to-one>标签映射。
    2. 实体类代码:与主键双向关联代码一致,此处略。
    3. 实体配置文件映射:
Person.hbm.xml配置不用改变,IDCard.hbm.xml配置如下:<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC     "-//Hibernate/Hibernate Mapping DTD 3.0//EN"    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping>    <class name="com.bjpowernode.hibernate.IdCard" table="t_idCard">        <id name="id">            <generator class="native"/>        </id>        <property name="cardNo"/>        <one-to-one name="person" property-ref="idCard"/>    </class></hibernate-mapping>  
    4. 小结:
        对于一对一唯一外键双向关联,必须指定<one-to-one>标签中的property-ref属性为关系字段的名称。
    【比较】
    总体上,一对一唯一外键关联映射很容易扩展,只需要将unique属性去掉,即可改成多对一的关联关系。所以,项目中还是常用唯一外键关联的方法,而不是主键关联的方法。
    如果项目中没有双向关联的需求,也是没有必要建立实体间的双向关联,单向关联即可。
    【结语】
    通过这几篇博客的总结,多对一、一对一关联关系的映射方法也就全部介绍完了。
    但自己的感觉是,即使总结了,但还是觉得很复杂,比较混乱,这也是使用Hibernate关联映射配置的困难之处,实体多了,必然就更加复杂了,所以并不是所有的项目中都会使用这样的关联配置。
    也许会采用多次查询的方法,即使工作量大了,但条理很清楚。
0 0
原创粉丝点击