重温Hibernate级联(转)

     本人乃普通人一个,放到人群中是找不到的那种,不比那些牛人能过目不忘,我相信那句话——书读百遍,其义自显,所以一本书我一般都读好几遍,第 一遍一般都是概读,达到初步掌握,能使用的地步,以后再一遍又一遍的精读,以便能够加深理解,从中得到新的体会。可以说级联是Hibernate的一大亮 点,也是比较麻烦的地方。下面就是我的读书记录,以及个人体会。

双向一对多父子关系

保存子

Parent p=(Parent)session.load(Parent.class.pid);
Child c=new Child();
c.setParent(p);
p.getChildren().add(c);
session.save(c);
session.flush():
为Parent添加一个addChild()方法
public void addChild(Child c){
c.setParent(this);
children.add(c);
}
这样上面的就可以替换为:
Parent p=(Parent)session.load(Parent.class.pid);
Child c=new Child();
p.addChild(c);
session.save(c);
session.flush():
以上是没有使用cascade参数,要是使用cascade参数,如cascade="all",以上简化为:
Parent p=(Parent)session.load(Parent.class.pid);
Child c=new Child();
p.addChild(c);
session.flush():
注意这里不用显式调用save方法了,同样的,保存或删除Parent对象的时候并不需要遍历其子对象,下面的代码会删除对象
p及其所有子对象对应的数据库记录。
Parent p=(Parent)session.load(Parent.class,pid);
session.delete(p);
session.flush();
然而,这段代码如下
Parent p=(Parent)session.load(Parent.class,pid);
Child c=(Child)p.getChildren().iterator().next();
p.getChildren().remove(c);
c.setParent(null);
session.flush();
不会从数据库删除c;它只会删除与p之间的连接(并且会导致违反NOT NULL约束,在这个例子中)。你要显式调用delete()来
删除Child。
Parent p=(Parent)session.load(Parent.class.pid);
Child c=(Child)p.getChildren().iterator().next();
p.getChildren.remove(c);
session.delete(c);
session.flush();

 

在我们的例子中,如果没有父对象,子对象就不应该存在,如果将子对象从Colletction中移除,实际上我们是想删除它。

要实现这种要求,就必须使用cascade="all-delete-orphen"。
注意:即使在Collection一方的映射中指定inverse="true",级联仍然是通过遍历Collection中的元素来处理的。如果你想
通过级联进行子对象的插入、删除、更新操作,就必须把它加载到Collection中,只调用setParent()是不够的。
当级联更新时,对象Parent包含了子对象的集合,由于打开了级联更新,Hibernate需要知道哪些Child对象是新实例化的,哪
些代表数据库中的记录。我们假设Parent和Child对象的标识符都是自动分配的,Hibernate是通过对象的标示属性的值和
version或timestamp属性来判断哪些子对象是新的。下面代码会更新Parent和child对象,并且插入newChild对象。
//parent and child where both loaded in a previous session
parent.addChild(child);//把父关联的子上,把子关联到父上.
Child newChild=new Child();
parent.addChild(newChild);
session.update(parent);
session.flush();
这对于自动分配标识符的情况是非常好的,但是要是自定义的,即id的子元素<generator class="assigned" />,这就比较麻
烦了,因为Hibernate没办法区分新实例化的对象(标识被用户指定了)和前一个Session装入的对象,在这种情况下,
Hibernate会使用timestamp或version属性,或者查询第二级缓存,或者使用最坏的情况,查询数据库,来确认是否存在此
行记录。

个人总结: 级联保存、删除,父类只加载自己就行了;但级联更新,父类要加载子类对象,这样它才好区分哪些对象是新实
例的,那些是需要更新的。
级联更新:第一次是保存,以后是更新,则
Parent p=(Parent)session.getCascade(Parent.class,pid);
if(p.getChildren().size()>0){
for(Iterator iter=p.getChildren().iterator();iter.hasNext();){
//若更新对象
Child c=(Child)iter.next();
c.setName("c");//获取子类信息
parent.addChild(child);//把父关联的子上,把子关联到父上.
}
}else{
Child c=new Child();
…… ……… …… ………
parent.addChild(child);//把父关联的子上,把子关联到父上.

}

高级技能-高可用和容灾-两地三中心、异地多活架构 两地三中心和异地多活是当前主流的跨地域高可用架构方案。两地三中心通过生产中心、同城灾备和异地灾备的组合,提供多级容灾能力,适合对数据安全要求高的行业。异地多活则采用单元化设计,多个站点同时服务,提升资源利用率,但需解决网络延迟、数据冲突等挑战。两种架构在RTO/RPO、一致性、改造成本等方面各具特点,企业应根据业务规模、一致性要求和预算进行选择,可考虑从同城双活起步,逐步向异地多活演进。混合架构可能是平衡容灾与多活的务实方案。 阅读详情

相关推荐

读书笔记 | 财务会计理论(第7版 William R.Scott)(中):契约视角下的会计信息价值

本文从契约理论视角深入剖析了财务会计信息的核心价值。文章指出,会计信息作为关键的“契约润滑剂”,通过债务合同与薪酬合同等具体形式,有效解决了公司内外的信息不对称与道德风险问题,协调了股东、债权人及管理层等多方利益,是公司治理与资本市场有效运转的基石。

mac99的博客 330

Hibernate 基本数据操作(增删改查)

package com.sunyard.DBO;import java.util.Iterator;import java.util.List;import org.hibernate.Query;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.Transaction;i

orphen_lee的专栏 638

Aloudata Agent :基于 NoETL 明细语义层的分析决策智能体

这是包括我们在内的一些厂商探索的一个新方向,这种方式先由大模型将自然语言转化为对指标语义层的查询请求(MQL,Metrics Query Language),再由指标平台将指标和维度的查询与计算逻辑转化为准确的 SQL 查询语句。用户查询经大模型语义解析后,将其转换为指标、维度及筛选条件的组合表达,并生成面向指标平台的 MQL,Aloudata CAN 指标平台的语义引擎将 MQL 转换为准确和可执行的查询 SQL,语义引擎内置函数体系与 SQL 解析器,确保语义转换的 100% 准确性。

Aloudata的博客 1663

示例:父子关系(Parent Child Relationships)

第 22 章 示例:父子关系(Parent Child Relationships)刚刚接触Hibernate的人大多是从父子关系(parent / child type relationship)的建模入手的。父子关系的建模有两种方法。由于种种原因,最方便的方法是把Parent和Child都建模成实体类,并创建一个从Parent指向Child的关联,对新手来说

待定的专栏 3088

【算法】—前缀和与差分详解

前缀和指一个数组的某下标之前的所有数组元素的和(即数列的前n项求和),前缀和是一种重要的预处理,能够降低算法的时间复杂度,可以快速地求出某一段的和,对于处理区间之间的问题是往往十分高效相比较其他算法而言,前缀和更像是一种解题的技巧,一种优化方式输入一个长度为 n 的整数序列。接下来再输入 m 个询问,每个询问输入一对 l,r 对于每个询问,输出原序列中从第 l 个数到第 r 个数的和5 32 1 3 6 41 21 32 4123453610。

DAY I 的成长之路 6022

从零到一:手把手教你用DJI E-Port套件为M350 RTK开发第三方负载(PSDK V3实战)

本文详细介绍了如何使用DJI E-Port套件为M350 RTK开发第三方负载,涵盖硬件配置、开发环境搭建及实战应用。通过PSDK V3开发套件,开发者可以高效实现负载与无人机的通信,适用于电力巡检等工业场景,提升开发效率与系统稳定性。

weixin_26841743的博客 701

重温Hibernate级联

本人乃普通人一个,放到人群中是找不到的那种,不比那些牛人能过目不忘,我相信那句话——书读百遍,其义自显,所以一本书我一般都读好几遍,第一遍一般都是概读,达到初步掌握,能使用的地步,以后再一遍又一遍的精读,以便能够加深理解,从中得到新的体会。可以说级联是Hibernate的一大亮点,也是比较麻烦的地方。下面就是我的读书记录,以及个人体会。 双向一对多父子关系 保存子 Parent p=(Par...

十年回首,一纸感动! 173

4万字一文带你看懂车载摄像头技术、市场、发展前景

1、小孔成像 在战国初期,我国学者墨子(公元前468年-公元前376年)和弟子们完成了世界上第一个小孔成像的实验,并记录在《墨经》中:“景到,在午有端,与景长。说在端。”“景。光之人,煦若射,下者之人也高;高者之人也下。足蔽下光,故成景于上;首蔽上光,故成景于下。在远近有端,与于光,故景库内也。” 此文解释了小孔成倒像的原因,指出了光沿直线传播的性质。这是对光直线传播的第一次科学解释。 而西方世界直到公元前350年,古希腊学者亚里士多德提出光学法则,西方人从此了解小孔成像的光学原理。

m0_58838529的博客 1495

重温hibernate(一)hibernate环境搭建

目录 项目结构 pom.xml Customer.java Customer.hbm.xml hibernate.cfg.xml CustomerTest.java 实现:保存一个客户到数据库 idea建maven项目 项目结构 pom.xml 只需这三个依赖core,log4j,mysql-connector &lt;dependency&gt; &lt;...

weixin_43842590的博客 380

YOLOv11涨点改进 | 检测头Head改进篇 | 利用DynamicConv高效动态卷积改进YOLOv11检测头,DyHead通过增强检测头操作,轻量化改进、提高模型目标检测的精度

本文提出了一种基于动态卷积(DynamicConv)的YOLOv11检测头改进方法v11Detect_DyHead。该方法通过引入多专家机制和动态权重调整,在增加参数量的同时保持较低计算复杂度,有效解决了低FLOPs模型难以从大规模预训练中获益的问题。文章详细介绍了DynamicConv模块的原理和实现,包括其参数高效特性、多专家机制和动态权重生成方式。同时提供了完整的代码实现和添加该模块的具体步骤,并给出了相应的YAML配置文件。实验表明,该方法在保持较低计算开销的同时显著提升了模型性能,适用于视觉和语言

Ai缝合怪、助力小伙伴高效发论文 534

基于STM32、HAL库的GZP6816D气压传感器 驱动程序设计

测量范围:0-16kPa(可根据型号不同有变化)工作电压:1.8V-3.6V。高精度:±1% FS。

corlin6688的博客 217

重温hibernate(二)JPA环境搭建

目录 实现:保存一个客户到数据库 项目结构 pom.xml Customer.java persistence.xml CustomerTest.java 实现:保存一个客户到数据库 idea建maven项目 项目结构 pom.xml 只需这四个依赖core,log4j,mysql-connector,entitymanager &lt;dependency&gt; ...

weixin_43842590的博客 200

mapbox进阶,dem数据转为等高面,加载转换后的等高面到地图

本文详细介绍如何基于mapbox-gl v3.*.* 版本,使用dem数据转为等高面,加载转换后的等高面到地图,亲测可用。希望能帮助到您。一起学习,加油!加油!

我哎GIS博客 407

Hibernate关系对映-表映射基于XML配置方式

个人框架初学者,觉得hibernate的内容多,不多写肯定记不下来,写多了也不一定能信手拈来。所以今天写下一个总结,重温一遍,有需要的可以看看,大概分为: 1.对应关系(一对多 多对一 双向一对多 基于主键1对1 基于外键1对1 多对多),小白只会xml配置方式,请原谅 2.缓存(一级缓存,二级缓存,查询缓存,我博客里有相关文章,这里我不写了) 3.HQL方面的靠自己多多练习,这里也没办

心有猛虎,细嗅蔷薇 1445

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

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

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

<二>重温Hibernate one to one 映射

用户表: CREATE TABLE `tbl_user` (`id` VARCHAR(32) NOT NULL,`user_name` VARCHAR(20) NULL DEFAULT NULL,`passowrd` VARCHAR(20) NULL DEFAULT NULL) 用户账户表: CREATE TABLE `tbl_account` (`id` INT(10) NOT NULL,

CommonBorage 434

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

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

<三>重温Hibernate one to many 映射配置

单向一对多:只需在“一”放进行配置   双向一对多:一是关系维护端(owner side),多是关系被维护端(inverse side) 需要在关联双方都加以配置,而且需要在一的一方设置inverse=true   用户表: CREATE TABLE `tbl_user` (`id` INT(32) NOT NULL AUTO_INCREMENT,`user_name` VARCHAR

CommonBorage 1428

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

<一>重温Hibernate many to many映射

项目做完了,测试组在在测试中,趁此机会回头看下hibernate,不看不知道一看吓一跳,好多地方全忘了。 多对多映射: package wb.wk.review.bean; import java.util.Set; public class Classes { private int id; private String className; private Set classes

CommonBorage 398

重温搭建Spring2.5+Hibernate3.3框架

    好久没有搭建SSH框架了,今天偶然搭建,感到生疏,都忘了需要哪些JAR包,今天在这总结一下     Spring2.5+Hibernate3.3   1.使用spring2.5.6必须至少使用两个Jar     spring.jar     lib\jakarta-commons\commons-logging.jar     2.使用Hibernate3必须使用的Jar ...

爱java,爱生活 134

hibernate回顾

近期公司要进行对原来项目的修改和切割,原来项目用的是hibernate框架操作数据库,所以重温一下hibernate框架。 入门:https://www.cnblogs.com/mq0036/p/8522150.html 跟着这个博客可以大家一个简单hibernate的demo,但是 需要注意的是博主用的是eclipse如果你需要用idea的话需要进行修改 1.在pom.xml中添加(下边有...

喝水都塞牙 274

关于Hibernate的缓存

关于Hibernate的缓存 因为项目用到了Hibernate3.x版本,所以不又得重温了一下关于Hibernate的技巧和原理,其中主要是针对它的缓存进行那个了一番调研,于是想写点什么留下一点纪念。   (一)  Hibernate的缓存概念 Hibernate是干嘛的不用再解释了,它有两级缓存也是大家都知道的。简单来说一级缓存就是从你拿到Hibernate的session并且open

Ant Ren的专栏 1815

重温SSH框架

随便写写

杜 866

【重温版】MyBatis详解

​ , 2010年6月这个项目由Apache Software Foundation迁移到了Google Code。随着开发团队转投Google Code旗下,iBatis3.x正式更名为MyBatis。代码于2013年11月迁移到Github​ iBatis一词来源于和的组合,是一个基于Java的。iBatis提供的持久层框架MyBatis下载地址 3.创建MyBatis的核心配置文件 ​ 习惯上命名为,这个文件名仅仅只是建议,并非强制要求。​ ​ 4.创建mapper接口 5.创建MyBatis的

... 919

重温SSH整合项目

1.由spring处理的路径就可以带classpath: 2.在<tx:advice id="advice" transaction-manager="transactionManager">中别忘加transactionManager,不加也会自动带 3.页面上提示no Session 时的处理方式:   01.在hbm.xml配置文件中lazy为false   02.在da...

weixin_30371875的博客 81

在Eclipse中使用Struts和Hibernate框架搭建Maven Web项目

前言   学习使用Java还是2012年的事情,刚开始学习的Java的时候,使用的是MyEclipse工具和SSH框架。初学者适合使用MyEclipse,因为他将struts、Spring和Hibernate等框架集成在IDE中,可以直接通过添加Capacities将这些框架集成到Web Project中,相应的Jar包也会自动添加到lib目录下,开发过程中还是需要手动添加一些jar包...

ditunshi1633的博客 206

(重温Java注解知识)深入了解Java中的注解

0 前言 自Java5.0版本引入注解之后,它就成为了Java平台中非常重要的一部分。开发过程中,我们也时常在应用代码中会看到诸如@Override,@Deprecated这样的注解。这篇文章中,我将向大家讲述到底什么是注解?为什么要引入注解?注解是如何工作的?如何编写自定义的注解(通过例子)?什么情况下可以使用注解以及最新注解和ADF(应用开发框架)。这会花点儿时间,所以为自己准备一杯咖啡,让...

轻狂书生FS的博客 1961

spring/Hibernate 优化

对大部分典型的Spring/Hibernate企业应用来说,应用的性能大部分由持久层的性能决定。 这篇文章会重温一下怎么去确认我们的应用是否是”数据库依赖(data-bound)”(译者注:即非常依赖数据库,大量时间花在数据库操作上),然后会大概过一下7个常用的提升应用性能的速效方案。 怎么确定应用是否是“数据库依赖” 确认一个应用是是否是数据库依赖,首先通过在一些开发环境中做基本的运行...

iteye_123的博客 146
上一篇: a different object with the same identifier 解决办法
下一篇: RBAC(基于角色的访问控制)
w3053_5fdf588
博客等级 码龄18年 0粉丝 32原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值