《Hibernate学习笔记九》:多对一和一对多的关联关系
来源:互联网 发布:张国荣 唱功 知乎 编辑:程序博客网 时间:2024/06/05 18:11
《Hibernate学习笔记九》:多对一和一对多的关联关系
前面介绍了一对一的关联关系在Hibernate应该如何来实现,这篇博文就来介绍下多对一和一对多的关联关系。
多对一和一对多的关联关系在我们的生活中也比较常见,例如,在我们学生时代,一个班级可以有多个学生,而一个学生只能属于一个班级,这就是一个多对一(一对多)的例子;
还有在我们的工作中,一个工作小组可以有多个用户,而一个用户只能属于一个小组,这也是一个多对一(一对多)的关系的例子。
1、多对一的单向关联关系
下面就以一个工作小组可以有多个用户,而一个用户只能属于一个小组,这个例子来进行设计介绍如何建立一个多对一的关联关系。
在类的层面上:在多的一方加另一个的引用
在数据库层面上:在”多对一”中”多”的一方设置外键即可
1.1、多对一单向的关联关系的Annotation实现
Group类
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
User类
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
由于User实体和Group实体,User是处于“多对一”中“多”的一方,因此,我们就在User类中设置一个Group的外键即可建立多对一的关联关系。
测试结果如下:
1.2、多对一单向的关联关系的XXX.hbm.xml实现
Group类和User类
Group和User类中,有相应的属性和get、set方法即可。且User类中有一个Group的引用。
Group.hbm.xml
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
User.hbm.xml
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
通过在User.hbm.xml文件中,加入
- 1
就构建了多对一的关联关系。
2、一对多的单向关联关系
在类实体的层面上:在一的一方存在多方的集合
在数据库的层面上:在多方加外键
下面就以一个工作小组可以有多个用户,而一个用户只能属于一个小组,这个例子来进行设计介绍如何建立一个一对多的关联关系。
2.1、一对多单向的关联关系的Annotation实现
先看多的这方:User类
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
再看一的这方:Group类
由于是一对多的关系,因此在一的这方必须要有一个容器,这里采用的Set,Set容器可以用来避免重复,数据库中也是不允许主键重复的,与我们数据库的逻辑是符合的。
然后在Set容器的get方法上采用@OneToMany注解来进行修饰。并通过@JoinColumn(name=”groupId”)来指定外键名(外键在多的一方的表中生成)。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
测试结果如下:
如果我们不通过@JoinColumn(name=”groupId”)来指定外键名(外键在多的一方的表中生成),则Hibernate会为我们生成一个中间表,即将一对多当成多对多来进行处理了。
测试结果如下:
2.2、一对多单向的关联关系的XXX.hbm.xml实现
Group类
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
在Group.bhm.xml文件:
主要是为Group类中的Set属性,添加如下的代码即可构成一对多的关联关系:
- 1
- 2
- 3
- 4
完整内容如下:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
User类
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
User.hbm.xml文件
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
一对多(多对一)双向关联
在我们了解了一对多和多对一的单向关联之后,双向关联就相当简单了,就是将这两者的单向关联进行合并即可。下面只介绍下使用Annotation来构建双向关联。
在一的一方:Group实体类
类似构建一对多。
只是有一点需要注意:指定mappedBy
代码如下:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
在多的一方的User类
类似构建多对一的关联即可。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
这样就Ok了。
小结
多对一和一对多的单向关联关系的Annotation和XXX.hbm.xml文件的实现均比较简单。
from: http://blog.csdn.net/u010412719/article/details/51335064
- 《Hibernate学习笔记九》:多对一和一对多的关联关系
- 《Hibernate学习笔记九》:多对一和一对多的关联关系
- 【Hibernate】--关联关系映射:一对多和多对一
- Hibernate一对多、多对一关联关系的使用
- 【学习笔记】实例解说Hibernate 一对多、多对一关联关系
- Hibernate学习笔记一(复杂多对一和一对多关系)
- Hibernate关联关系映射 一对一 一对多 多对一
- hibernate关联关系中的一对多以及多对一
- Hibernate关联关系映射(一对多/多对一)
- 深入学习Hibernate4_06Hibernate一对多和多对一的映射关联关系
- Hibernate关联关系配置(一对多、一对一、多对一和多对多)
- Hibernate之关联关系映射(一对多和多对一映射,多对多映射)
- hibernate多对一关联和一对多关联
- hibernate的一对多和多对一关系映射
- hibernate映射关系 一对多、多对一单向关联 一对多双向关联
- Hibernate关于一对多 多对一 多对多关联关系的设置
- 关于hibernate的多对一单向关联,一对多单向关联,和一对多双向关联的疑惑解答
- 关于hibernate的多对一单向关联,一对多单向关联,和一对多双向关联的疑惑解答
- 有用的网络链接,给自己备份
- Redis简介以及和其他缓存数据库的区别
- ssh 链接问题
- 安卓手机使用NFC读取MifareClassic等标签信息
- TLS/SSL 协议详解 (31)TLS1.1 TLS1.2 在CBC模式下两种不同的加解密方式及优化思考
- 《Hibernate学习笔记九》:多对一和一对多的关联关系
- 常见字典常量和操作
- 冰风2-缓存
- 荷兰国旗问题
- 关于Android7.0的临时授权,出现FileUriExposedException错误
- android 获取本机其他app的版本信息
- C++ const和#define的异同
- Springmvc+mybatis+shiro+Dubbo+ZooKeeper+Redis+KafKa j2ee分布式架构核心技术
- Android: 详解触摸事件如何传递