多对一(一对多)的双向关联
一个组(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
多对一(一对多)的双向关联相关推荐
- hibernate 一对多(one-to-many)双向关联
一对多(one-to-many)双向关联实例(Department- Employee) 这里的一对多双向关联是在域模型(实体对象模型)上的概念,在关系数据库中,只存在外键参照关系,而且总是由&quo ...
- Hibernate映射详解(二)--多对一,一对多单向,一对多双向关联映射
在我们以前的数据库设计中,设计表就不是一件轻松的事情.多种事物之间往往都是有这样那样的关系的.那怎样设计表格,才能既将事情描述明白,又能使数据库设计的比较合理呢?那里我们提供了好多规范,好多约束来满足 ...
- JPA规范:一对多、一对一、多对多的双向关联与级联操作以及JPA联合主键
通常在企业开发中,开发Dao层有两种做法: (1)先建表,后再根据表来编写配置文件和实体bean.使用这种方案的开发人员受到了传统数据库建模的影响. (2)先编写配置文件和实体bean,然后再生成 ...
- Hibernate(九)一对多双向关联映射
上次的博文Hibernate从入门到精通(八)一对多单向关联映射中,我们讲解了一下一对多单向映射的相关 内容,这次我们讲解一下一对多双向映射的相关内容. 一对多双向关联映射 一对多双向关联映 射,即在 ...
- Hibernate一对多单向关联和双向关联映射方法及其优缺点
一对多关联映射和多对一关联映射实现的基本原理都是一样的,既是在多的一端加入一个外键指向一的一端外键,而主要的区别就是维护端不同. 它们的区别在于维护的关系不同: 一对多关联映射是指在加载一的一端数据的 ...
- jpa级联添加_JPA中的一对多双向关联与级联操作
学习Spring有两周时间了 , 个人觉得服务端主要实现的是数据关系的维护和数据结构的制定 , 以及由业务需求产生的CRUD , 只要保证对前端提供的接口稳定高效响应 , 具体的前端实现完全不关心. ...
- [置顶] Hibernate从入门到精通(十一)多对多双向关联映射
上次我们在中Hibernate从入门到精通(十)多对多单向关联映射讲解了一下多对多单向关联映射,这次我们讲解一下七种映射中的最后一种多对多双向关联映射. 多对多双向关联映射 按照我们之前的惯例,先看一 ...
- hibernate的一对多双向关联映射----客户和订单关系
客户和订单关系:客户是一的一方,订单是多的一方. customer表: CREATE TABLE `customer` ( `ID` int(4) NOT NULL AUTO_INCREMENT , ...
- myeclipse hbm2java_myeclipse试用小记----Hibernate多对一双向关联(2)
myeclipse试用小记----Hibernate多对一双向关联(2) 在上篇文章"myeclipse试用小记----Hibernate多对一单向关联(1)"中,讲到了" ...
- hibernate的映射之二(一对多双向关联)
hibernate的一对多双关联 一对多关联映射:在多的一端加入一个外键指向一的一端,它维护的关系是一指向多 hihernate一对多关联映射(双向Dept<----->Emp) 一对多双 ...
最新文章
- 2进制 , 8进制 , 10进制 , 16进制 , 介绍 及 相互转换 及 快速转换
- android socket 闪退,android客户端闪退
- 蓝奏网盘直链转换器 v1.1
- 燃气管理 php,智能燃气管理信息系统设计
- java 线程安全原子性_Java 线程安全之原子性
- Windows Terminal 窗口/控制台切换快捷键总结
- 剑指Offer——把字符串转换成整数
- Ten graph questions of about 2000 difficulty of Codeforces Round 2
- 公众号管理系统 html,Java SpringBoot+Mybatis Layui+JQuery+html微信公众号后台管理系统...
- php import mdf,mdf文件用什么打开 mdf是什么文件
- php 获取一年有多少天,【后端开发】php获取一年有多少天
- SpringBoot 集成 ES 7.6.2 并对字段进行中文和拼音分词处理
- iApp裕v3语言认识us与ug
- IDEA使用--字体、编码和基本设置
- autocad2022版安装提示提示“The feature you are trying to use is on a network resource ...”失败解决办法
- python : 新概念英语 课文转为html
- VertiGIS进入下一增长阶段,任命Andy Berry为首席执行官
- vue中使用video-player无法播放视频
- IT男人必学的20大泡妞妙招(请允许我蛋疼的转一下)
- MTK 手机芯片 2014 Roadmap
热门文章
- 权限验证框架Shiro
- oracle数据库连接满了,ORACLE数据库连接数满的分析及优化
- 树莓派和微信和服务器,用树莓派搭建微信公共平台
- Spring、SpringMVC和SpringBoot之间的关系
- linux 下i2c读写命令,S3C2440 Linux下的I2C驱动以及I2C体系下对EEPROM进行读写操作
- word文档保存到服务器,读取SQL表数据保存到Word并将Word文档保存到服务器代码
- mysql保存时乱码了_MySQL保存中文乱码的原因和解决办法
- mysql数据库表的类型介绍,mysql数据库表的类型介绍
- 苹果cms10自适应模板_哪里有苹果cms10自适应模板?
- Java 进栈出栈的过程