您的位置:首页 > 其它

Hibernate 关系映射小结

2013-05-05 16:46 190 查看
最近刚开始学习hibernate, 学到关联映射的时候有些疑惑,现在学完了 ,总结一下。

一、基本概念

关联关系:为对象与对象之间的关系,并不是指数据库中表与表的关系

单向:意思为可以通过A找到B,而不能通过B找到A。代码中体现为A中拥有B的一个引用,而B没有A的引用

双向:既可以通过A找到B,也可以通过B找到A。代码中体现为AB中都拥有对方的引用。

二、关联关系分类及示例

关系可以分为:单向、双向、一对一、一对多、多对一、多对多

根据上边之间的组合,可以组合为以下七种:

单向一对一

双向一对一

单向一对多
单向多对一

双向一对多(双向一对多)

单向多对多
双向多对多

单向和双向在上面已经解释过了,下面解释下一对一、一对多、多对一、多对多。(具体示例单击相关链接即可)

1. 一对一

一对一关系就像现实中的一夫一妻,一个丈夫(妻子)只能有一个妻子(丈夫)。

单向一对一

是指:可以通过丈夫找到妻子,而不能通过妻子找到丈夫。反之亦成立.

双向一对一

:即可以通过丈夫找到妻子,也可通过妻子找到丈夫。

组件映射

:一个对象是另一个对象的一部分,比如说汽车零件(CarItem)是汽车(Car)的一部分。

代码中配置方法为:1.Annotation方式; 只需在Car中的getCarItem()方法上添加注解:@Embedded即可。

@Embedded 表明该对象是从别的位置嵌入过来的,是不需要单独映射的表.

2.XML方式:只需要配置一个Car.hbm.xml文件即可,不需要CarItem.hbm.xml文件。

在Car.hbm.xml中配置如下

<hibernate-mapping>
<class name="Car" table="Car">
<id name="id" column="id">
<generator class="native"></generator>
</id>

<property name="name" column="name" />
<component name="CarItem">
<property name="CarItemId"></property>
</component>
</class>
</hibernate-mapping>


2.一对多和多对一

一对多和多对一都是指一个对象包含或拥有多个对象,只是在代码中的表示的侧重点不同(在数据库中生成的表的结构一样),就像一个group(组)包含多个user(用户)。

单向一对多

:group一对多user,此时代码中的侧重点在group,及对象有拥有user的集合。这时可以通过group找到该group下的所有user,而不能通过user找到该group。

单向多对一

:user多对一group,此时代码中的侧重点在user,及对象有拥有group的引用。这时可以通过user找到该user所在的group,而不能通过group找到该user。

双向一对多(双向多对一)

:一对多和多对一的双向关联为同一种情况。

3.多对多

一个老师可以教多个学生,而一个学生可以被很多老师教。此时老师和学生之间就是多对多的关系。(此时数据库中会产生中间表)

单向多对多

:单向多对多在代码中的写法和一对多或多对一类似,都是一个对象拥有另一个对象的引用,这个对象可以通过另一个对象的引用找到另一个对象。

双向多对多

:和单向不同的是,双向多对多中两个对象都拥有对方的引用,可以通过这个引用很容易的找到对方。

规律:凡是双向关联,必设mappedBy。

mappedBy的作用是告诉另一方,这一方被注解的属性已经在另一方注解了。例如在Wife类中的getHusband () 方法上注解@OneToOne(mappedBy="wife"),表示该类已经被 Husband类中的wife属性映射,不需要在此处重复映射。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: