Hibernate中的映射关系(二)

来源:互联网 发布:手机上能装修淘宝店铺 编辑:程序博客网 时间:2024/05/18 15:55
    前面跟大家分享了Hibernate中的单向一对一、双向一对一、多对一映射关系,接下来跟分享一下其他的比较重要的映射关系。
(一)单向一对一唯一外键关联映射

    案例:其实单向的一对一唯一外键关联就是之前说的那个一对一映射和多对一映射关系的特例,还用那个人和身份号的例子来说明,单项一对一唯一外键关联顾名思义就是在一个实体对象中加入关联对象的外键。例如:


  在t_person表中的每一个记录都与t_idCard表中的记录一一对应,而维护他们之间的关系的就是在t_Person表中增加了一个idCard的外键,而且该外键是唯一的,不可重复的。

<span style="font-size:24px;"><hibernate-mapping ><class name="com.lcy.hibernate.IdCard" table="t_idCard" ><id name="id"><generator class="native"/></id><property name="cardNo" /><many-to-one name="person" unique="true"></many-to-one></class></hibernate-mapping></span>

    注:采用<many-to-one> 标签来映射,指定多的一端unique属性为true,这样就限制了多的一端的多重性为一。
    从使用的标签上来看,单向一对一唯一外键映射关系属于多对一映射关系的一种特例。
    (二)双向一对一唯一外键关联
    双向的一对一唯一外键关联看了上面的例子,相信也就能知道个差不多了吧。这种映射关系无非就是在两个关联的对象内注入对方的属性。在这里就不再赘述了。
    给出配置文件代码:
<span style="font-size:24px;"><hibernate-mapping ><class name="com.lcy.hibernate.IdCard" table="t_idCard" ><id name="id"><generator class="native"/></id><property name="cardNo" /><one-to-one name="person" property-ref="idCard"></one-to-one></class></hibernate-mapping></span>
    值得注意的是,在此映射关系中个,必须指定one-to-one标签中的property-ref属性为关系字段的名称。


   (三)单向一对多关联映射
    案例:在多对一映射关系中提到的学生和班级的例子反过来就是一个一对多的映射关系。多对一映射关系和一对多映射关系主要有一下不同点:
     1.多对一维护的关系:多指向一的关系,如果维护了多指向一的关系,那么加载多的一端的时候会把一的一端加载上来;
       2. 一对多维护的关系:一指向多的关系,如果维护了一指向多的关系,那么加载一的一端的时候会把多的一端加载上来。

具体实现如下:
   
1、Classes.java 和 Student.java里各有两个普通属性id和name。在Classes里加入新属性:private Set students;
  2、映射文件的修改:Classes.hbm.xml里除了普通属性,加入集合映射:

<hibernate-mapping ><class name="com.lcy.hibernate.Classes" table="t_classes"><id name="id"><generator class= "native"/></id><property name="name" /><set name="student"><key column="classesid" /><one-to-many class="com.lcy.hibernate.Student"/></set></class></hibernate-mapping>
     注1:“一”的一端维护关系。
  注2:session.save(student),session.save(classes),保存student和classes对象。可以成功保存数据,但是需要发出多余的update语句来维持关系。
    总结:以上Hibernate的七种映射关系,基本上是可以用在绝大多数的对象间关系中的。Hibernate的中最重要的仍然是映射关系,所以能够掌握好这些映射关系是十分必要的。  

0 0