web开发(十一)之Hibernate关联关系配置

来源:互联网 发布:白知之明的读音是什么 编辑:程序博客网 时间:2024/04/28 11:07

写在前面

Hibernate中关系的映射共有以下四种:一对多、多对一、一对一、多对多这四种。

一对多单向关联 xml映射

一对多即在A表中的每一条数据都会与B表中的n条有关联;在这种情况下一般都是在B表添加一个字段用来当作外键与A表中的主键相关联。而这种关联反馈到Hibernate中时,单向有两种方法:

一种为在A表映射的类中添加一个集合,集合的泛型为B表映射的类,映射对象中存储的是B表中数据映射的对象,在关系映射文件中需要添加相应的,该标签中需指定name属性用来表示集合中存储的对象,并且该标签中需要有两个子:设定class属性指定B表映射的类;需要设定column属性指定对应表中的哪一列,范例代码如下

<!-- depart_id为外键 --><set name="emps">             <key column="depart_id"/>             <one-to-many class="Employee"/>   </set>  

另一种是在B表中添加一个A表映射类的对象。在关系映射文件中需要添加,需要指定name属性指定对象名称,column属性指定对应表中的字段名称,范例代码如下

<!-- depart_id为外键 --><many-to-one name="depart" column="depart_id"/> 

一对多双向关联 xml映射

双向管理即两种单向关联同时加入即可。为节省版面,就不在此书写了

多对一单向,双向关联映射 xml映射

多对一其实与一对多是一样的,只要弄清楚里面的几个属性的配置,只要掌握一种,另一种就自然学会了。

一对一映射 xml映射

一对一即在A表中的每一条数据都会与B表中的1条数据有关联;这种情况下在DB中可以在任意表中创建一个字段与另一个表的主键形成关联外键,亦可以直接将某一表的主键直接设置成外键与另一表的主键关联。在Hbiernatez中同样的有单向关联与双向关联,双向关联也是两种单向关联同时应用而已。

首先在一对一关联中需要搞清楚两个表的主从关系,比如一个人与一张身份证,一张身份证只能属于一个人,主就是人。所以在人的关系映射文件中即需要添加标签,范例如下

<one-to-one name="idCard"></one-to-one> 

而如果在身份证的关系映射文件中则需要添加标签,因为身份证与人的关系相当于多对一的关系(这里比较繁琐,需要仔细想想,推敲一下,就明白了)。范例如下

<many-to-one name="person" column="person_id"/>  

另外一种将主键直接设置成外键的方法,在关系映射文件中需要将主键标签中的class属性设置为”foreign”,并添加子标签,标签体为关联的对象名称。范例如下

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

多对多映射 xml映射

多对多的关系比较复杂,在DB中体现为需要创建第三张表C表,用来存放A表与B表的主键,并同时将这两个主键作为C表的主键。其实也可以看成A表与C表形成了多对一的关系,同时A表与C表也行程了多对一的关系,这样在Hibernate中则只需要将A表映射的类与B表映射的类分别添加一个集合属性,泛型指定对方为对方类即可,在关系表中则需要在标签中添加的子标签即可。

注:在实际应用中,多对多关系的查询是十分缓慢的,所以应尽量避免多对多关系的出现。

0 0
原创粉丝点击