hibernate一对多关联映射学习小结
发布时间 - 2026-01-11 03:11:42 点击率:次一对多关联映射

映射原理
一对多关联映射和多对一关联映射的映射原理是一致的,都是在多的一端加入一个外键,指向一的一端。关联关系都是由多端维护,只是在写映射时发生了变化。
多对一和一对多的区别
多对一和一对多的区别在于维护的关系不同:
(1)多对一:多端维护一端的关系,在加载多端时,可以将一端加载上来。
(2)一对多:一端维护多端的关系,在加载一端时,可以将多端加载上来。
分类
一对多单向关联映射
对象模型
从对象模型中,我们可以看出,Group持有User的一个引用。由于是单向关联,所以数据在加载Group时,会把User加载上来,但是User并不知道Group的存在。
我们先看一下Group和User的实体,以及映射文件。
Group
package com.bjpowernode.hibernate;
import java.util.Set;
public class Group {
private int id;
private String name;
private Set users;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Set getUsers() {
return users;
}
public void setUsers(Set users) {
this.users = users;
}
}
User
package com.bjpowernode.hibernate;
public class User {
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
User.hbm.xml
<?xml version=1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="com.bjpowernode.hibernate.User" table="t_user"> <id name="id"> <generator class="native"/> </id> <property name="name"/> </class> </hibernate-mapping>
Group.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.bjpowernode.hibernate.Group" table="t_group">
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
<!-- users属性,表达的是本对象与User的一对多的关系 -->
<set name="users">
<!--当前表(Group)的主键-->
<key column="groupid"/>
<one-to-many class="com.bjpowernode.hibernate.User"/>
</set>
</class>
</hibernate-mapping>
生成的表结构和测试数据
缺点
1)因为多端User不知道Group的存在(也就是User不维护与Group的关系),所以在保存User时,关系字段groupId为null,如果该字段设置为非空,则将无法保存数据。
2)因为User不维护关系,而Group维护关系,Group就会发出多余的update语句,保证Group和User有关系,这样加载Group时才把该Users对应的用户加载上来。
一对多双向关联映射
对象模型
双向关联映射对比单向关联映射,对象的加载方向由单向变成了双向。
我们看一下Group和User的实体,映射文件
Group
package com.bjpowernode.hibernate;
import java.util.Set;
public class Group {
private int id;
private String name;
private Set users;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Set getUsers() {
return users;
}
public void setUsers(Set users) {
this.users = users;
}
}
User
package com.bjpowernode.hibernate;
public class User {
private int id;
private String name;
private Group groups;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Group getGroups() {
return groups;
}
public void setGroups(Group groups) {
this.groups = groups;
}
}
Group.hbm.xml
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="com.bjpowernode.hibernate"> <class name="Group" table="t_group"> <id name="id"> <generator class="native"/> </id> <property name="name"/> <!-- 影响控制反转:inverse="false",多的一端维护关系,让一的一端失效 --> <set name="users" inverse="true"> <key column="groupid" not-null="true"/> <one-to-many class="User"/> </set> </class> </hibernate-mapping>
User.hbm.xml
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="com.bjpowernode.hibernate"> <class name="User" table="t_user"> <id name="id"> <generator class="native"/> </id> <property name="name"/> <!-- groups属性,表达的是本对象与Group的多对一的关系 --> <many-to-one name="groups" class="Group" column="groupid"/> </class> </hibernate-mapping>
生成的表和测试数据
一对多双向关联的映射方式:
1)在一的一端的集合上采用<key>标签,在多的一端加入一个外键
2)在多的一端采用<many-to-one>标签
注意:<key>标签和<many-to-one>标签加入的字段保持一直,否则会产生数据混乱。
inverse属性:
inverse属性可以用在一对多和多对多双向关联上,inverse属性默认为false,为false表示本端维护关系,如果inverse为true,则本端不能维护关系,会交给另一端维护关系,本端失效。所以一对多关联映射我们通常在多的一端维护关系,让一的一端失效,所以设置为inverse为true。
注意:inverse属性,只影响数据的存储,也就是持久化。
目的
一对多双向关联映射的目的主要是为了解决一对多单向关联的缺陷而不是需求驱动的。
总结
以上所述是小编给大家介绍的hibernate一对多关联映射学习小结,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
# hibernate
# 关联映射
# 一对多
# Hibernate双向一对一映射关系配置代码实例
# 深入解析Java的Hibernate框架中的一对一关联映射
# Hibernatede 一对多映射配置方法(分享)
# Hibernate多对一单项关联
# 举例讲解Java的Hibernate框架中的多对一和一对多映射
# java Hibernate 一对多自身关联问题
# Hibernate的一对一
# 一对多/多对一关联保存的实现
# 加载
# 多端
# 的是
# 设置为
# 小编
# 测试数据
# 就会
# 是在
# 在此
# 是由
# 给大家
# 可以看出
# 会把
# 看一下
# 在一
# 用在
# 时才
# 则会
# 所述
# 先看
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
香港服务器如何优化才能显著提升网站加载速度?
Laravel软删除怎么实现_Laravel Eloquent SoftDeletes功能使用教程
中山网站推广排名,中山信息港登录入口?
详解jQuery停止动画——stop()方法的使用
网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?
Laravel如何实现登录错误次数限制_Laravel自带LoginThrottles限流配置【方法】
如何快速生成凡客建站的专业级图册?
如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?
Laravel如何使用Sanctum进行API认证?(SPA实战)
如何在IIS中新建站点并配置端口与IP地址?
如何快速上传自定义模板至建站之星?
laravel怎么实现图片的压缩和裁剪_laravel图片压缩与裁剪方法
如何快速查询网站的真实建站时间?
logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?
JavaScript如何实现路由_前端路由原理是什么
Win11任务栏卡死怎么办 Windows11任务栏无反应解决方法【教程】
如何用好域名打造高点击率的自主建站?
Laravel用户认证怎么做_Laravel Breeze脚手架快速实现登录注册功能
详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)
JS中对数组元素进行增删改移的方法总结
教你用AI润色文章,让你的文字表达更专业
Claude怎样写结构化提示词_Claude结构化提示词写法【教程】
香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南
清除minerd进程的简单方法
Laravel怎么写单元测试_PHPUnit在Laravel项目中的基础测试入门
HTML5建模怎么导出为FBX格式_FBX格式兼容性及导出步骤【指南】
js实现点击每个li节点,都弹出其文本值及修改
如何在阿里云购买域名并搭建网站?
Bootstrap CSS布局之列表
三星、SK海力士获美批准:可向中国出口芯片制造设备
Laravel的.env文件有什么用_Laravel环境变量配置与管理详解
为什么要用作用域操作符_php中访问类常量与静态属性的优势【解答】
想要更高端的建设网站,这些原则一定要坚持!
哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?
深圳防火门网站制作公司,深圳中天明防火门怎么编码?
如何在IIS7上新建站点并设置安全权限?
宙斯浏览器怎么屏蔽图片浏览 节省手机流量使用设置方法
Win11关机界面怎么改_Win11自定义关机画面设置【工具】
如何在七牛云存储上搭建网站并设置自定义域名?
Android自定义listview布局实现上拉加载下拉刷新功能
php增删改查怎么学_零基础入门php数据库操作必知基础【教程】
JavaScript 输出显示内容(document.write、alert、innerHTML、console.log)
车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?
javascript中数组(Array)对象和字符串(String)对象的常用方法总结
如何在Ubuntu系统下快速搭建WordPress个人网站?
网站制作价目表怎么做,珍爱网婚介费用多少?
如何在搬瓦工VPS快速搭建网站?
Python文件流缓冲机制_IO性能解析【教程】
香港网站服务器数量如何影响SEO优化效果?
Laravel如何清理系统缓存命令_Laravel清除路由配置及视图缓存的方法【总结】
上一篇:《晴空之下》T1角色一览
上一篇:《晴空之下》T1角色一览

