一个组(Group)有多个用户(User),进行多对一(一对多)的双向配置,在数据库中生成的表结构如下图:

  Annotation配置:

      Group:

 1 package com.bjsxt.hibernate;
 2
 3 import java.util.HashSet;
 4 import java.util.Set;
 5
 6 import javax.persistence.Entity;
 7 import javax.persistence.GeneratedValue;
 8 import javax.persistence.Id;
 9 import javax.persistence.OneToMany;
10 import javax.persistence.Table;
11
12 @Entity
13 @Table(name="t_group")
14 public class Group {
15     private Integer id;
16
17     private String name;
18
19     private Set<User> users = new HashSet<User>();
20
21     @Id
22     @GeneratedValue
23     public Integer getId() {
24         return id;
25     }
26
27     public void setId(Integer id) {
28         this.id = id;
29     }
30
31     public String getName() {
32         return name;
33     }
34
35     public void setName(String name) {
36         this.name = name;
37     }
38
39     @OneToMany(mappedBy="group")//表示和User是一对多的关系,并且以User的group属性为准,自己就不做映射配置了
40     public Set<User> getUsers() {
41         return users;
42     }
43
44     public void setUsers(Set<User> users) {
45         this.users = users;
46     }
47 }

      User:

 1 package com.bjsxt.hibernate;
 2
 3 import javax.persistence.Entity;
 4 import javax.persistence.GeneratedValue;
 5 import javax.persistence.Id;
 6 import javax.persistence.JoinColumn;
 7 import javax.persistence.ManyToOne;
 8 import javax.persistence.Table;
 9
10 @Entity
11 @Table(name="t_user")
12 public class User {
13     private Integer id;
14
15     private String name;
16
17     private Group group;
18
19     @Id
20     @GeneratedValue
21     public Integer getId() {
22         return id;
23     }
24
25     public void setId(Integer id) {
26         this.id = id;
27     }
28
29     public String getName() {
30         return name;
31     }
32
33     public void setName(String name) {
34         this.name = name;
35     }
36
37     @ManyToOne
38     @JoinColumn(name="group_ID")//指定列名为 group_ID
39     public Group getGroup() {
40         return group;
41     }
42
43     public void setGroup(Group group) {
44         this.group = group;
45     }
46 }

    XML 配置:

      Group:

 1 package com.bjsxt.hibernate;
 2
 3 import java.util.HashSet;
 4 import java.util.Set;
 5
 6 public class Group {
 7     private Integer id;
 8
 9     private String name;
10
11     private Set<User> users = new HashSet<User>();
12
13     public Integer getId() {
14         return id;
15     }
16
17     public void setId(Integer id) {
18         this.id = id;
19     }
20
21     public String getName() {
22         return name;
23     }
24
25     public void setName(String name) {
26         this.name = name;
27     }
28
29     public Set<User> getUsers() {
30         return users;
31     }
32
33     public void setUsers(Set<User> users) {
34         this.users = users;
35     }
36 }

View Code

      Group.hbm.xml:

 1 <?xml version="1.0"?>
 2 <!DOCTYPE hibernate-mapping PUBLIC
 3         "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 4         "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
 5
 6 <hibernate-mapping package="com.bjsxt.hibernate">
 7     <class name="Group" table="t_group">
 8         <id name="id" column="id">
 9             <generator class="native"/>
10         </id>
11         <property name="name" column="name" />
12         <set name="users">
13             <key column="groupId"></key>
14             <one-to-many class="User"/>
15         </set>
16     </class>
17 </hibernate-mapping>

      User:

 1 package com.bjsxt.hibernate;
 2
 3 public class User {
 4     private Integer id;
 5
 6     private String name;
 7
 8     private Group group;
 9
10     public Integer getId() {
11         return id;
12     }
13
14     public void setId(Integer id) {
15         this.id = id;
16     }
17
18     public String getName() {
19         return name;
20     }
21
22     public void setName(String name) {
23         this.name = name;
24     }
25
26     public Group getGroup() {
27         return group;
28     }
29
30     public void setGroup(Group group) {
31         this.group = group;
32     }
33 }

View Code

      User.hbm.xml

 1 <?xml version="1.0"?>
 2 <!DOCTYPE hibernate-mapping PUBLIC
 3         "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 4         "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
 5
 6 <hibernate-mapping package="com.bjsxt.hibernate">
 7     <class name="User" table="t_user">
 8         <id name="id" column="id">
 9             <generator class="native"/>
10         </id>
11         <property name="name" column="name" />
12         <many-to-one name="group" column="groupId"></many-to-one>
13     </class>
14 </hibernate-mapping>

    两个配置文件的 groupId 必须取名一致,否则会出现两个外键。

两种方式最后生成的SQL语句:

jar包链接: https://pan.baidu.com/s/1eSuw9Aq 密码: zrsy

开发链接: https://pan.baidu.com/s/1hsA73Ju 密码: 3q2b

转载于:https://www.cnblogs.com/ShawnYang/p/6737624.html

多对一(一对多)的双向关联相关推荐

  1. hibernate 一对多(one-to-many)双向关联

    一对多(one-to-many)双向关联实例(Department- Employee) 这里的一对多双向关联是在域模型(实体对象模型)上的概念,在关系数据库中,只存在外键参照关系,而且总是由&quo ...

  2. Hibernate映射详解(二)--多对一,一对多单向,一对多双向关联映射

    在我们以前的数据库设计中,设计表就不是一件轻松的事情.多种事物之间往往都是有这样那样的关系的.那怎样设计表格,才能既将事情描述明白,又能使数据库设计的比较合理呢?那里我们提供了好多规范,好多约束来满足 ...

  3. JPA规范:一对多、一对一、多对多的双向关联与级联操作以及JPA联合主键

    通常在企业开发中,开发Dao层有两种做法:  (1)先建表,后再根据表来编写配置文件和实体bean.使用这种方案的开发人员受到了传统数据库建模的影响.  (2)先编写配置文件和实体bean,然后再生成 ...

  4. Hibernate(九)一对多双向关联映射

    上次的博文Hibernate从入门到精通(八)一对多单向关联映射中,我们讲解了一下一对多单向映射的相关 内容,这次我们讲解一下一对多双向映射的相关内容. 一对多双向关联映射 一对多双向关联映 射,即在 ...

  5. Hibernate一对多单向关联和双向关联映射方法及其优缺点

    一对多关联映射和多对一关联映射实现的基本原理都是一样的,既是在多的一端加入一个外键指向一的一端外键,而主要的区别就是维护端不同. 它们的区别在于维护的关系不同: 一对多关联映射是指在加载一的一端数据的 ...

  6. jpa级联添加_JPA中的一对多双向关联与级联操作

    学习Spring有两周时间了 , 个人觉得服务端主要实现的是数据关系的维护和数据结构的制定 , 以及由业务需求产生的CRUD , 只要保证对前端提供的接口稳定高效响应 , 具体的前端实现完全不关心. ...

  7. [置顶] Hibernate从入门到精通(十一)多对多双向关联映射

    上次我们在中Hibernate从入门到精通(十)多对多单向关联映射讲解了一下多对多单向关联映射,这次我们讲解一下七种映射中的最后一种多对多双向关联映射. 多对多双向关联映射 按照我们之前的惯例,先看一 ...

  8. hibernate的一对多双向关联映射----客户和订单关系

    客户和订单关系:客户是一的一方,订单是多的一方. customer表: CREATE TABLE `customer` ( `ID` int(4) NOT NULL AUTO_INCREMENT , ...

  9. myeclipse hbm2java_myeclipse试用小记----Hibernate多对一双向关联(2)

    myeclipse试用小记----Hibernate多对一双向关联(2) 在上篇文章"myeclipse试用小记----Hibernate多对一单向关联(1)"中,讲到了" ...

  10. hibernate的映射之二(一对多双向关联)

    hibernate的一对多双关联 一对多关联映射:在多的一端加入一个外键指向一的一端,它维护的关系是一指向多 hihernate一对多关联映射(双向Dept<----->Emp) 一对多双 ...

最新文章

  1. 2进制 , 8进制 , 10进制 , 16进制 , 介绍 及 相互转换 及 快速转换
  2. android socket 闪退,android客户端闪退
  3. 蓝奏网盘直链转换器 v1.1
  4. 燃气管理 php,智能燃气管理信息系统设计
  5. java 线程安全原子性_Java 线程安全之原子性
  6. Windows Terminal 窗口/控制台切换快捷键总结
  7. 剑指Offer——把字符串转换成整数
  8. Ten graph questions of about 2000 difficulty of Codeforces Round 2
  9. 公众号管理系统 html,Java SpringBoot+Mybatis Layui+JQuery+html微信公众号后台管理系统...
  10. php import mdf,mdf文件用什么打开 mdf是什么文件
  11. php 获取一年有多少天,【后端开发】php获取一年有多少天
  12. SpringBoot 集成 ES 7.6.2 并对字段进行中文和拼音分词处理
  13. iApp裕v3语言认识us与ug
  14. IDEA使用--字体、编码和基本设置
  15. autocad2022版安装提示提示“The feature you are trying to use is on a network resource ...”失败解决办法
  16. python : 新概念英语 课文转为html
  17. VertiGIS进入下一增长阶段,任命Andy Berry为首席执行官
  18. vue中使用video-player无法播放视频
  19. IT男人必学的20大泡妞妙招(请允许我蛋疼的转一下)
  20. MTK 手机芯片 2014 Roadmap

热门文章

  1. 权限验证框架Shiro
  2. oracle数据库连接满了,ORACLE数据库连接数满的分析及优化
  3. 树莓派和微信和服务器,用树莓派搭建微信公共平台
  4. Spring、SpringMVC和SpringBoot之间的关系
  5. linux 下i2c读写命令,S3C2440 Linux下的I2C驱动以及I2C体系下对EEPROM进行读写操作
  6. word文档保存到服务器,读取SQL表数据保存到Word并将Word文档保存到服务器代码
  7. mysql保存时乱码了_MySQL保存中文乱码的原因和解决办法
  8. mysql数据库表的类型介绍,mysql数据库表的类型介绍
  9. 苹果cms10自适应模板_哪里有苹果cms10自适应模板?
  10. Java 进栈出栈的过程