Hibernate 关系映射小结
2013-05-05 16:46
190 查看
最近刚开始学习hibernate, 学到关联映射的时候有些疑惑,现在学完了 ,总结一下。
单向:意思为可以通过A找到B,而不能通过B找到A。代码中体现为A中拥有B的一个引用,而B没有A的引用
双向:既可以通过A找到B,也可以通过B找到A。代码中体现为AB中都拥有对方的引用。
根据上边之间的组合,可以组合为以下七种:
单向一对一
双向一对一
单向一对多
单向多对一
双向一对多(双向一对多)
单向多对多
双向多对多
单向和双向在上面已经解释过了,下面解释下一对一、一对多、多对一、多对多。(具体示例单击相关链接即可)
代码中配置方法为:1.Annotation方式; 只需在Car中的getCarItem()方法上添加注解:@Embedded即可。
@Embedded 表明该对象是从别的位置嵌入过来的,是不需要单独映射的表.
2.XML方式:只需要配置一个Car.hbm.xml文件即可,不需要CarItem.hbm.xml文件。
在Car.hbm.xml中配置如下
规律:凡是双向关联,必设mappedBy。
mappedBy的作用是告诉另一方,这一方被注解的属性已经在另一方注解了。例如在Wife类中的getHusband () 方法上注解@OneToOne(mappedBy="wife"),表示该类已经被 Husband类中的wife属性映射,不需要在此处重复映射。
一、基本概念
关联关系:为对象与对象之间的关系,并不是指数据库中表与表的关系单向:意思为可以通过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属性映射,不需要在此处重复映射。
相关文章推荐
- Hibernate关系映射小结
- hibernate关系映射小结 - annotation
- Hibernate之一对多映射关系小结
- [学习小结]Hibernate 的几种映射及映射关系
- Hibernate框架运行机制(增删改查,自动生成表,query接口,criteria接口,关系映射,缓存)
- Hibernate学习之 -- 使用Middlegen-Hibernate-r5创建oracle10g的table的hibernate映射文件,Hibernate学习笔记三 ---持久化类和关系数据
- hibernate的继承关系映射(一)
- Hibernate 、多表关联映射-多对一关系(many-to-one)
- Hibernate之jpa实体映射的三种继承关系
- Hibernate 关系映射 总结整理
- Hibernate的七种映射关系之七种关联映射(二)
- [原创]java WEB学习笔记77:Hibernate学习之路---Hibernate 版本 helloword 与 解析,.环境搭建,hibernate.cfg.xml文件及参数说明,持久化类,对象-关系映射文件.hbm.xml,Hibernate API (Configuration 类,SessionFactory 接口,Session 接口,Transaction(事务))
- Hibernate中一对多的映射关系实例
- Hibernate 、多表关联映射-多对一关系(many-to-one)
- 【HIbernate框架学习】:Hibernate对象关系映射之双向多对多关联映射
- Hibernate学习笔记-------继承关系映射
- Hibernate中映射关系 一对一 详解
- hibernate关系映射,一对多,多对多,以及session方法简介
- Hibernate中继承关系映射一
- hibernate关系映射——继承映射