随笔 - 6  文章 - 129  trackbacks - 0
<2025年2月>
2627282930311
2345678
9101112131415
16171819202122
2324252627281
2345678

常用链接

留言簿(14)

随笔档案(6)

文章分类(467)

文章档案(423)

相册

收藏夹(18)

JAVA

搜索

  •  

积分与排名

  • 积分 - 823427
  • 排名 - 49

最新评论

阅读排行榜

评论排行榜

一、一对一关联关系的映射
        实体对象之间一对一的关联关系是通过数据库中的外键实现的。对外键的使用有以下两种方式:
      
      1、主键关联
      2、唯一外键关联


主键关联
在一对一的主键关联方式中,不需要借助任何额外的字段,直接通过两个表的主键来形成一对一的映射关系,两个表共享主键。例如,对于学生和学号进行主键一对一关联。首先要在Student对象的配置文件吕定义到Nubmer对象的关联:

      <one-to-noe  name="number" class = "Nubmer" cascade="all"/>

还需要在number对象的配置文件中定义到student对象的关联:

      <one-to-one  name="student" class="Student" constrained="true" />

在one-to-one中 有constrained属性表明主键同时作为外键参照 student表

另外为了确保两个对象的主键相等,在定义主键的时候可以使用foreign的Hibernate标识符生成策略来实现这一目的。

      <id name="id" column="ID">
            <generator class="foreign" >
               <param name="property">student</param>
            </generator>
      </id>

这样就完成了通过主键关联关系的方式实现对象之间一对一。

唯一外键关联
采用唯一外键关联的方式实际上是一个表的某个外键字段关联到另一个表的主键上,这其实是一对多的关联关系的特例。同样以学生和学号为例,不同的是在学号对象中包含一个stu_id 字段,这个字段与student对象的id字段相关联。

首先配置number对象的映射文件

      <many-to-one name="student" class="Student" column="STU_ID" unique="true" />

在这里就形成了一个number对象到student对象的单向一对一关系。

接下来在student对象的配置文件进行相应的配置实现对象之间的双向一对一关联关系。

      <one-to-one name="number" class="Number" property-ref="student" />

这样就通过唯一外键的方式建立了对象之间的一对一的关联关系。
---------------------------------------------------------------------------------------------------------------

二、一对多关联关系的映射

一对多的关联关系在现实生活是很常见的。例如,班级和学生之间就是一对多的关系,一个班级有多个学生。
下面来配置一下单向的一对多的关联关系。在这里从“一”的这一方开始入手,配置是通过<one-to-many>元素来实现的。
配置Term班级对象的映射文件:

       <set name="student" class="Student" cascade="all" inverse="true" >          
             <key column="term_id"/>
            <one-to-mary class="Student"/>
      </set>
对于这种单向关联关系,只能通过一方来实现对另一方的级联更新操作。

三、多对一关联关系的映射

多对一的关联关系是一对多的反向。在实际开发中,将一对多配置为双向的关联关系,同时也会将关联关系的主控方设置为“多”的这一方。这样就可以避免需要在“多”的一方的关联字段中插入空值的情况出现。
多对一的关联关系需要在“多”的这一方使用<many-to-noe >来进行配置。
Student对象的映射文件:

      <many-to-one name="term" class="Term" column="TERM_ID" />

另外,为了使“多”的一方变为主控方,还需要配置“一”的一方时增加   inverse="true"    的配置(set属性)


在对象之间的关联关系中,inverse="false"   的一方为主控方,由它来负责维护对象之间的关联关系。
-------------------------------------------------------------------------------------------------------------------------------

四、多对多关联关系的映射

多对多的关联关系也是一种常见的对象关联关系。与其它关系的不同之处就是它需要借助第三张表来实现多对多的关联关系。
下面看一人例子,我们以学生(Student)和课程(Course)为例。在描述这两个对象之间的关联关系时就需要一个中间表Student_Course来确立它们之间的关联。

在Student中配置一个多对多的关联

      <set   name="course"
               table="STUDENT_COURSE"
               inverse="true"
               cascade="save-update">
              <key column="ID"/>
              <many-to-many column="COURSE_ID" class="course"/>
      </set>

同样在另一个对象(Course)中需要进行如下的配置:

       <set   name="student"
               table="STUDENT_COURSE"

               cascade="save-update">
              <key column="ID"/>
              <many-to-many column="STUDENT_ID" class="student"/>
      </set>

需要注意的一点是:对于inverse的配置则根据实际的开发情况来确定哪一方为主控方。


posted on 2007-08-21 10:34 Ke 阅读(1713) 评论(0)  编辑  收藏 所属分类: hibernate

只有注册用户登录后才能发表评论。


网站导航: