Hibernate的多对一和一对一映射

 

   Hibernate多对一的实现(Student和Class(学生和班级为例)):

        在多的一端使用<many-to-one>标签,这样会在多的一端加入一个外键,这个外键来自于一的一端。同时,这个外键的名称   是由<many-to-one>中的column属性来确定的,如果忽略column属性,在外键的名称默认和实体的属性名称一致。

         配置实例:<many-to-one name="stuClass" column="class"/>

         其中的stuClass为Student中的属性,class为数据库中外键的名称,如果column被忽略,在外键名称为stuClass。

   Hibernate一对一的实现:(以Student和StudentCard(学生和图书卡为例))

 

           1、一对一主键关联映射(单向):

               让两个实体对象的id保持相同,这样可以避免多余的字段被创建。

 

           具体的实现:

           Student.hbm.xml中配置

            <id name="id">

           <!-- student的主键来源studentCard,也就是共享studentCard的主键 -->

          <generator class="foreign">

               <param name="property">stuCard</param>

           </generator>

    </id>

 

             <one-to-one name="stuCard" constrained="true"/>

             <one-to-one>标签的含义,指示hibernate怎么加载它的关联对象,默认根据主键加载,                                              constrained="true",表明当前主键上存在一个约束,student的主键作为外键参照了stuCard。

 

              StudentCard.hbm.xml中配置和普通的配置一样

                

            2、一对一主键关联映射(双向):

 

            具体实现:

            Student.hbm.xml中配置不变;在StudentCard.hbm.xml中加入<one-to-one> 标签指向student即可

            <one-to-one name="student">

   

   3、一对一唯一外键关联映射(单向):

   具体实现是和多对一的原理是一样的,只不过是在<many-to-one>的标签中多加入了一个属性:unique="true"

            这就使多的一端的相应字段的任何值都只能为一中情况,从而实现一对一;

                 在Student.hbm.xml中其他的配置保持和普通的一样,另加入:<many-to-one name="stuCard" unique="true">

StudentCard.hbm.xml中配置和普通的配置一样;

 

   4、一对一唯一外键关联映射(双向):

   Student.hbm.xml中的配置不需要变化,只需要在StudentCard.hbm.xml中加入<one-to-one name="student" property-ref="stuCard">,其中stuCard是Student中的属性,其类型为:StudentCard。

 

   以上是Hibernate中的多对一和一对一的配置,具体配置请下载附件。

 

              
 
             
 
 

 

你可能感兴趣的:(Hibernate,职场,休闲,many-to-one,one-to-one)