hibernate级联保存更新

hibernate的级联保存操作(一对多) 现在我们开始做级联保存操作的练习,上一篇《hibernate基本保存操作》中介绍了hibernate执行保存过程的操作。我们在那个的基础上来做一对多的级联保存操作; 第一步:创建数据库模型Customer(客户)和LinkPerson(联系人) public class Customer{ private String id;//主键ID private String cust 阅读详情
来源:http://www.tianxiaboke.com/u/lyeerwy

级联保存和更新
当Hibernate持久化一个临时对象时,在默认情下,他不会自动持久化所关联的其他临时对象,如果希望当持久化对象时把他所关联的所有临时对象进行持久化的话:可以把 的cascade属性设置为"save-update" ,cascade的默认属性值为none。
cascade:设置操作对象时的级联操作,即层级之间的连锁操作
值 save-update :表示当保存和更新当前对象(即insert和update语句时),会级联保存和更新与他关联的对象
值 all :表示任何情况下都会进行级联操作,即对一个对象进行操作,也会对和他关联的其他对象进行同样的操作
值 delete :表示在执行delete时,进行级联操作,删除和他关联的对象
值 none :表示任何情况下,都不会进行级联操作
<set>元素的inverse属性

在运行上面的程序时,如果hibernate的"show-sql"设置为true时,就会看到Hibernate会生成很多sql语句,其实很多sql语句都是重复的
eg: 
insert into  test.order(o_name,c_id)values(?,?)
insert into  test.order(o_name,c_id)values(?,?)
insert into  test order   set c_id=? where id=?
insert into  test order   set c_id=? where id=?

为了解决这个问题,我们可以利用在<set>标签中加上inverse属性。术语:inverse是指反转的意思,在Hibernate中,表示关联关系中的方向关联关系中,inverse="false"的主控方,由主动方负责维护对象关系我们 在customer对象的对象配置文件中加上

<set name="orders"  cascade="save-update" inverse="true">
<key  column="c_id" > </key>
<one-to-many class="net.mbs.mypack.Order " />
</set>

声明在Customer和Order的双向关联关系中,Customer端的关联只是Order端关联的镜象(即Order端是主空端,负责维护Customer和order对象之间的关联关系),当hibernate探测到持久化对象Customer或Order的状态发生变化时(主要是关联关系的改变),仅按照Order对象的状态的变化来同步更新数据库。
按次配置,如果在程序中,我们仅仅使用Customer.getOrder().add(order)(涉及了和Order的关联关系的改变),是不能让数据库跟对象的变化来进行数据库同步更新的,只有利用Order对象的方法改变的Order对象状态(eg:order.setCustomer(customer)----涉及到了和Customer的关联关系的改变)时,数据库才会根据变化来同步更新数据库,即只有主控方的状态(涉及到了和另一方面的关联关系的改变)发生了变化后,才会触发对象和数据库的同步更新。

映射一对多双向关联关系
当类与类之间建立了关联,就可以方便的从一个对象导航到另一个对象或一组与他关联的对象当中,根据上面的程序,对于一个给定的Order对象,如果想获取与他关联的Customer对象,我们只需要调用入下方法:
Customer c=order.geCustomer(); 那么当我们得到一个Customer对象后,想查出和这个Customer对象关联的所有Order对象时,应该怎么办呢?由于在Customer中没有建立对Order对象的关联,所以,不能通过加载Customer对象来自动加载和他关联的所有Order对象,唯一的方法只能通过JDBC或SQL语言人工写出代码来查询数据库Order表来返回所需要的信息
上面的问题虽然解决,但不能算是最好,因为这样性能会有所下降,对象位于内存中,在内存中从一个对象导航到另一个对象显然比到数据库中查询数据要快得多

具体实现<br>
1:由于Customer和Order是一对多,即一个Customer要对应多个Order,所以在Customer中应该建立一个Set对象,用于存放和本Customer对象关联的所有Order对象。
2:在customer.hbm.xml通过<one-to-many>建立对Order表的关联关系
注意:<one-to-many>应该放置在<set>标签中 
我们先来看看Customer类的设计和customer.hbm.xml文件的内容
<br><br><br>------------------------------------------------------
Customer Order 双向一对多
1:Customer类中建立一个容器对象,包含关联的所有Order对象
2:Order类中建立一个Customer对象,关联Customer
inverse="true"表示将维护关联的权利交给引起Hibernate语句的生成

customer.getOrders().add(order);
customer.setName("dddddd");

inverse="true"(设置此属性的一方----是被控方)
当主控方修改对象之间的关联关系时,让Hibernate生成sql语句

By:lsfhack Email:lsfhack@163.com QQ:858084865

Hibernate级联保存 Hibernate级联保存;主子表同时保存; 阅读详情

相关推荐

hibernate many-to-many级联保存,级联更新,级联删除

hibernate many-to-many级联保存,级联更新,级联删除

Hibernate 级联保存

一对多的保存方法: 代码: @ManyToOne @JoinColumn(name = "REQ_ID") private Request request; @OneToMany(cascade = CascadeType.ALL, mappedBy = "request") @JsonIgnore private List<FundRequest> fundRequests; 保存方法: FundRequest fundRequest = new FundRequest(); Reques

wa2661391317的博客 534

Verilog仿真必备:FSDB dump命令全解析与实战配置指南

本文深入解析了Verilog仿真中FSDB波形记录的核心命令与实战配置技巧。针对大规模SoC验证场景,详细介绍了如何通过$fsdbDumpvars、$fsdbDumpfile等命令实现信号精准捕获、文件体积控制和动态启停,并提供了智能化的分层dump策略,帮助工程师在保证调试信息完整性的同时,大幅提升验证效率并有效管理波形数据。

cnn8visionary的博客 348

Hibernate快速入门、快速使用(Hibernate级联操作)

Hibernate简介 如何使用 具体操作 创建maven工程 添加 hibernate.cfg.xml 文件 创建实体类 创建实体关系映射文件 将实体类关系映射文件注册到 Hibernate.cfg.xml 配置文件中 使用 Hibernate API 完成数据操作 pom.xml 文件中需要配置 resource 查看执行结果 Hibernate 级联操作 一对多关系 多对多关系 Hibernate 实现一对多 将实体类关系映射文件注册到 hibernate.cfg.xml 配置文件中 编写测试类

weixin_57558097的博客 4192

告别手动归档:基于Allegro Skill的XTools一键生成Gerber与生产文件实践

本文详细介绍了基于Allegro Skill的XTools工具如何实现一键生成Gerber与生产文件,大幅提升PCB设计效率。通过自动化流程,解决了传统手动归档中的重复劳动、人为失误和标准不统一等问题,特别适合需要频繁输出生产文件的工程师。文章包含安装配置、实战操作、问题排查及进阶技巧,帮助用户快速掌握这一高效工具。

weixin_30505225的博客 461

告别虚拟机!在WSL2的Ubuntu里5分钟跑通LVGL v9.2图形界面(附SDL2配置避坑)

本文详细介绍了如何在WSL2的Ubuntu子系统中快速配置LVGL v9.2图形库的SDL2模拟环境,帮助嵌入式开发者在5分钟内跑通第一个图形界面示例。通过WSL2和VSCode的远程开发插件,实现Windows系统下无缝使用Linux工具链,大幅提升开发效率。

weixin_28736335的博客 425

Hibernate级联保存和更新

级联保存和更新当Hibernate持久化一个临时对象时,在默认情下,他不会自动持久化所关联的其他临时对象,如果希望当持久化对象时把他所关联的所有临时对象进行持久化的话:可以把 的cascade属性设置为"save-update" ,cascade的默认属性值为none。cascade:设置操作对象时的级联操作,即层级之间的连锁操作值 save-update :表示当保存和更新当前对象(即inser

银狐的专栏 7876

Ubuntu18.04黑屏救急指南:从tty到图形界面的5种恢复方法(附网络配置技巧)

本文针对Ubuntu 18.04系统启动后出现黑屏并进入tty命令行的问题,提供了一套从紧急诊断到完全恢复图形化界面的系统性实战指南。文章详细讲解了五种核心恢复方法,包括重启显示管理器、重装ubuntu-desktop桌面环境、手动安装Xorg与LightDM等,并重点解决了纯命令行环境下的网络配置难题,帮助用户快速修复系统,恢复工作环境。

weixin_29243279的博客 359

hibernate级联保存更新、删除

1、级联保存和更新 当Hibernate持久化一个临时对象时,在默认情下,他不会自动持久化所关联的其他临时对象,如果希望当持久化对象时把他所关联的所有临时对象进行持久化的话;可以把的cascade属性设置为: "save-update" ,cascade的默认属性值为none。 cascade:设置操作对象时的级联操作,即层级之间的连锁操作 值 save-update :表示当保存和更

赶路人儿 2769

kettle写doris操作

文件在目录:doris-master\extension\kettle\assemblies\plugin\target\doris-stream-loader-plugins-9.4.0.0-343.zip。官方提供了doris stream load插件,下载源码编译后放到kettle的插件目录即可使用。地址:https://github.com/apache/doris.git。注意:需要doris插件或者kettle转换生成模板的私聊博主。使用PDmaner同步业务库生成建表语句。

weixin_44449054的博客 3030

IPD的分析工具与模型(十六)CBB公用基础模块管理实现资源共享,缩短开发周期

CBB流程的开发环节,基于CBB规划中所识别和设计的CBB,进行CBB的详细设计(包括参数设计和接口设计),并最终实现CBB的落地开发。作为特殊类型的技术构件,CBB的开发流程,可沿用技术开发中的构件开发流程,具体包括概念、计划、开发和迁移等步骤,具体可参见前文的相关介绍。有了蓝图与架构设计,落地实施是关键攻坚。具体工作内容包括:具体工作内容包括:a. 以相似性、聚类、相对独行性、可组合、可扩展性、可维护性等原则为指导,按照产品的功能特征和业务类型,聚焦零散的功能点,形成功能模块,实现产品功能模块的划分;

corgi2020的博客 2001

Hibernate –级联示例(保存,更新,删除和删除孤立的孤儿)

级联是一项方便的功能,用于保存手动管理另一侧状态所需的代码行。 “ Cascade”关键字通常出现在集合映射上,以自动管理集合的状态。 在本教程中,此一对多示例将用于演示级联效果。 级联保存/更新示例 在此示例中,如果保存了“库存”,则其所有引用的“ stockDailyRecords”也应保存到数据库中。 1.没有保存更新级联 在上一节中 ,如果要将“股票”及其引用的“ ...

一名可爱的技术搬运工 457

多智能体强化学习MATD3算法完整复现与分析

多智能体强化学习MATD3算法复现与分析摘要 MATD3算法是多智能体深度强化学习领域的重要进展,通过改进MADDPG算法,引入双Q学习、延迟策略更新和目标策略平滑等技术,显著提升了算法稳定性。本文完整复现了MATD3算法,详细解析了其数学原理,包括部分可观测马尔可夫博弈模型和TD3核心思想。在实现层面,设计了集中式Critic和分布式Actor的神经网络架构,采用PyTorch框架构建了Actor-Critic网络模块,包含精心设计的权重初始化和训练流程。该算法有效解决了多智能体环境中的非平稳性、信用分配

max500600的博客 529

HIbernate--多对多的级联操作(保存、更新、删除)详解

级联操作 多对多的级联操作同一对多和多对一是一样的。如果只保存单独的一方是不可以的,还是需要保存双方的。如果想保存一方就需要设置级联操作。同样需要设置主控方。 创建表 创建sys_user、sys_role、sys_user_role三张表: 创建实体 User: public class User { //主键 private Long user_id; private String u...

吴声子夜歌的博客 1400

使用openclaw出现blocked URL fetch (url-fetch) reason=Blocked: resolves to private/internal/special 解决方案

本文主要介绍了使用openclaw出现blocked URL fetch (url-fetch) target=https://news.google.com/search reason=Blocked: resolves to private/internal/special-use IP address 解决方案,希望能对使用xx的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 11万+

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Hibernate入门(八)级联保存或更新(含问题在末尾,求大佬指点..)

级联保存或更新CASCADE 级联保存或更新:   作用就是:保存一方的数据的时候,会把关联的对象也同时保存。 级联保存或更新的配置:     属性名:cascade         属性值:             1.none:所有情况下均不进行关联操作。(默认值)             2.save-update:在执行save/update/saveOrUpdat...

daxia7577的博客 342

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

hibernate级联保存和更新

当hibernate持久化一个临时对象时,默认情况下,它不会自动持久化所关联的其他临时对象。所以会抛出TransientObjectException异常。如果希望hibernate持久化这个临时对象时自动持久化所关联的临时对象,要把的cascade属性设为"save-update".(默认为"none") <many-to-one name="school" column="scho

Crazy Android 1280

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

hibernate级联保存,更新个人遇到的问题

在级联更新的时候,数据库中的数据是增加的,只是外键不存在,导致这样的问题产生的原因是,字表主键ID没有添加到集合中,导致Hibernate找不到子项而执行更新。 转载于:https://www.cnblogs.com/xinzehome/p/3716632.html...

weixin_30699443的博客 141

【Hibernate】Hibernate中的级联保存更新cascade错误分析

Hibernate中的级联保存更新cascade错误分析

weknow 2253

Hibernate系列教材 (十六)- 各类概念 - 级联

简单的说,没有配置级联的时候,删除分类,其对应的产品不会被删除。但是如果配置了恰当的级联,那么删除分类的时候,其对应的产品都会被删除掉。运行代码就会发现,删除分类的时候,会把分类下对应的产品都删除掉,否则只会把产品对应的cid设置为空。级联通常用在one-many和many-to-many上,几乎不用在many-one上。的可运行项目,配置运行起来,确认可用之后,再学习做了哪些步骤以达到这样的效果。在确保可运行项目能够正确无误地运行之后,再严格照着教程的步骤,对代码模仿一遍。

Lan_ht的博客 42
上一篇: BeanUtils的copyProperties的效率…
下一篇: JS&nbsp;时间处理和格式转换
jarry.liu
博客等级 码龄16年 36粉丝 304原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jarry.liu

如果对您有帮助,鼓励下博主吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值