Hibernate的对象有3种状态,分别为:瞬时态(Transient)、持久态(Persistent)、脱管态(Detached)。处于持久态的对象也称为PO(Persistence Object),瞬时对象和脱管对象也称为VO(Value Object)。
瞬时态
由new命令开辟内存空间的java对象,
eg. Person person = new Person("xxx", "xx");
如果没有变量对该对象进行引用,它将被java虚拟机回收。
瞬时对象在内存孤立存在,它是携带信息的载体,不和数据库的数据有任何关联关系,在Hibernate中,可通过session的save()或saveOrUpdate()方法将瞬时对象与数据库相关联,并将数据对应的插入数据库中,此时该瞬时对象转变成持久化对象。
持久态
处于该状态的对象在数据库中具有对应的记录,并拥有一个持久化标识。如果是用hibernate的delete()方法,对应的持久对象就变成瞬时对象,因数据库中的对应数据已被删除,该对象不再与数据库的记录关联。
当一个session执行close()或clear()、evict()之后,持久对象变成脱管对象,此时持久对象会变成脱管对象,此时该对象虽然具有数据库识别值,但它已不在HIbernate持久层的管理之下。
持久对象具有如下特点:
1. 和session实例关联;
2. 在数据库中有与之关联的记录。
脱管态
当与某持久对象关联的session被关闭后,该持久对象转变为脱管对象。当脱管对象被重新关联到session上时,并再次转变成持久对象。
脱管对象拥有数据库的识别值,可通过update()、saveOrUpdate()等方法,转变成持久对象。
脱管对象具有如下特点:
1. 本质上与瞬时对象相同,在没有任何变量引用它时,JVM会在适当的时候将它回收;
2. 比瞬时对象多了一个数据库记录标识值。
hibernate的各种保存方式的区(save,persist,update,saveOrUpdte,merge,flush,lock)及对象的三种状态
hibernate的保存
hibernate对于对象的保存提供了太多的方法,他们之间有很多不同,这里细说一下,以便区别。
一、预备知识
对于hibernate,它的对象有三种状态,transient、persistent、detached
下边是常见的翻译办法:
transient:瞬态或者自由态
(new DeptPo(1,”行政部”,20,”行政相关”),该po的实例和session没有关联,该po的实例处于transient)
persistent:持久化状态
(和数据库中记录想影射的Po实例,它的状态是persistent, 通过get和load等得到的对象都是persistent)
detached:脱管状态或者游离态
(1)当通过get或load方法得到的po对象它们都处于persistent,但如果执行delete(po)时(但不能执行事务),该po状态就处于detached, (表示和session脱离关联),因delete而变成游离态可以通过save或saveOrUpdate()变成持久态
(2)当把session关闭时,session缓存中的persistent的po对象也变成detached
因关闭session而变成游离态的可以通过lock、save、update变成持久态
持久态实例可以通过调用 delete()变成脱管状态。
通过get()或load()方法得到的实例都是持久化状态的。
脱管状态的实例可以通过调用lock()或者replicate()进行持久化。
save()和persist()将会引发SQL的INSERT,delete()会引发SQLDELETE,
而update()或merge()会引发SQL UPDATE。对持久化(persistent)实例的修改在刷新提交的时候会被检测到,它也会引起SQL UPDATE。
saveOrUpdate()或者replicate()会引发SQLINSERT或者UPDATE
二、save 和update区别
把这一对放在第一位的原因是因为这一对是最常用的。
save的作用是把一个新的对象保存
update是把一个脱管状态的对象或自由态对象(一定要和一个记录对应)更新到数据库
三、update 和saveOrUpdate区别
这个是比较好理解的,顾名思义,saveOrUpdate基本上就是合成了save和update,而update只是update;引用hibernate reference中的一段话来解释他们的使用场合和区别
通常下面的场景会使用update()或saveOrUpdate():
程序在第一个session中加载对象,接着把session关闭
该对象被传递到表现层
对象发生了一些改动
该对象被返回到业务逻辑层最终到持久层
程序创建第二session调用第二个session的update()方法持久这些改动
saveOrUpdate(po)做下面的事:
如果该po对象已经在本session中持久化了,在本session中执行saveOrUpdate不做任何事
如果savaOrUpdate(新po)与另一个与本session关联的po对象拥有相同的持久化标识(identifier),抛出一个异常
org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [org.itfuture.www.po.Xtyhb#5]
saveOrUpdate如果对象没有持久化标识(identifier)属性,对其调用save() ,否则update() 这个对象
四、persist和save区别
这个是最迷离的一对,表面上看起来使用哪个都行,在hibernate reference文档中也没有明确的区分他们.
这里给出一个明确的区分。(可以跟进src看一下,虽然实现步骤类似,但是还是有细微的差别)
主要内容区别:
1,persist把一个瞬态的实例持久化,但是并"不保证"标识符(identifier主键对应的属性)被立刻填入到持久化实例中,标识符的填入可能被推迟到flush的时候。
2,save, 把一个瞬态的实例持久化标识符,及时的产生,它要返回标识符,所以它会立即执行Sql insert
五、saveOrUpdate,merge和update区别
比较update和merge
update的作用上边说了,这里说一下merge的
如果session中存在相同持久化标识(identifier)的实例,用用户给出的对象覆盖session已有的持久实例
(1)当我们使用update的时候,执行完成后,会抛出异常
(2)但当我们使用merge的时候,把处理自由态的po对象A的属性copy到session当中处于持久态的po的属性中,执行完成后原来是持久状态还是持久态,而我们提供的A还是自由态
六、flush和update区别
这两个的区别好理解
update操作的是在自由态或脱管状态(因session的关闭而处于脱管状态)的对象//updateSQL
而flush是操作的在持久状态的对象。
默认情况下,一个持久状态的对象的改动(包含set容器)是不需要update的,只要你更改了对象的值,等待hibernate flush就自动更新或保存到数据库了。hibernate flush发生在以下几种情况中:
1, 调用某些查询的和手动flush(),session的关闭、SessionFactory关闭结合
get()一个对象,把对象的属性进行改变,把资源关闭。
2,transaction commit的时候(包含了flush)
七、lock和update区别
update是把一个已经更改过的脱管状态的对象变成持久状态
lock是把一个没有更改过的脱管状态的对象变成持久状态(针对的是因Session的关闭而处于脱管状态的po对象(2),不能针对因delete而处于脱管状态的po对象)
对应更改一个记录的内容,两个的操作不同:
update的操作步骤是:
(1)属性改动后的脱管的对象的修改->调用update
lock的操作步骤是:
(2)调用lock把未修改的对象从脱管状态变成持久状态-->更改持久状态的对象的内容-->等待flush或者手动flush
八、clear和evcit的区别
clear完整的清除session缓存
evcit(obj)把某个持久化对象从session的缓存中清空。
分享到:
相关推荐
Delphi 12.3控件之数据库开发基础课程SQL学习01-认识Navicat SQL工具,创建数据库和表.rar
本教学质量评价系统采用的数据库是Mysql,使用JSP技术开发。在设计过程中,充分保证了系统代码的良好可读性、实用性、易扩展性、通用性、便于后期维护、操作方便以及页面简洁等特点。 通过标签分类管理等方式,实现管理员;个人中心、公告信息管理、学院管理、学生管理、教师管理、督导管理、教师信息管理、学生评教管理、督导评教管理,学生;个人中心、公告信息管理、教师信息管理、学生评教管理,督导;公告信息管理、教师信息管理、督导评教管理,教师;个人中心、公告信息管理、教师信息管理、学生评教管理、督导评教管理等信息管理功能,从而达到对教学质量评价系统信息的高效管理。 关键词:教学质量评价系统 ,JSP技术,Mysql数据库
摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本社区养老服务系统就是在这样的大环境下诞生,其可以帮助使用者在短时间内处理完毕庞大的数据信息,使用这种软件工具可以帮助管理人员提高事务处理效率,达到事半功倍的效果。此社区养老服务系统利用当下成熟完善的Spring Boot框架,使用跨平台的可开发大型商业网站的Java语言,以及最受欢迎的RDBMS应用软件之一的MySQL数据库进行程序开发。社区养老服务系统有管理员,用户两个角色。管理员功能有个人中心,用户管理,服务种类管理,社区服务管理,服务预约管理,物品种类管理,物品信息管理,借用信息管理,归还信息管理,活动分离管理,社区活动管理,活动报名管理,疫情监控管理,物业收费管理,资讯中心管理,意见中心管理,系统管理。用户可以注册登录,查看管理员发布的各中心信息,可以服务预约,借用归还,活动报名,发布自己的疫情监控信息,查看物业收费等操作。社区养老服务系统的开发根据操作人员需要设计的界面简洁美观,在功能模块布局上跟同类型网站保持一致,程序在实现基本要求功能时,也为
内容概要:本文档详细阐述了南京林业大学本科毕业设计(论文)的具体撰写规范和要求,旨在确保毕业生能够提交高质量的设计(论文)。主要内容涵盖了从标题到附录的所有部分的撰写要求和格式标准,强调毕业设计(论文)不仅检验学生的学术能力,也是教学质量的关键指标。文中详细描述了每个组成部分的内容要求和书写格式,如标题、摘要、正文、结论、参考文献及附录的具体规定,并提供了具体的标准和操作流程。同时,针对不同类型的专业和学科提出了不同的撰写细则,确保规范适应广泛的学术背景和研究主题。 适合人群:即将进行本科毕业设计(论文)撰写的南京林业大学在校生及其指导教师。 使用场景及目标:① 帮助学生熟悉并掌握毕业设计(论文)的各项要求,从而确保顺利完成学业要求;② 教师利用该规范来审核和指导学生的工作。 阅读建议:该文档条理清晰,分类细致,因此读者应按步骤逐步理解和实践每一部分内容的要求和规范。同时,注意不同专业对于篇幅、内容重点等方面可能存在的特定调整。此外,对于涉及具体的排版和技术术语部分,建议配合实际案例进行练习。
内容概要:本作业指导书详细介绍了面向电气与机器人工程专业的计算机视觉模块课程(EL3105),旨在让学生深入理解和实现实时视频稳定化技术,特别是针对相机抖动补偿的方法。学生需要撰写报告并实现算法,解释选择的视频稳定方法以及具体的软件实现步骤。报告应涵盖背景介绍、解决方案详述、实验过程及其结论。提供的两个预录制视频将作为学生练习的数据集来测试视频稳定性。此外,学生需保证提交材料为原创,未使用任何AI工具辅助。 适合人群:适用于电气与机器人专业本科与研究生级别的学生,在掌握了基本图像特征提取匹配的基础上进一步探索高级应用技能。 使用场景及目标:帮助学员掌握关键点检测、稳健匹配、运动估计等基础知识的应用能力,同时培养他们独立解决实际问题的能力和编程技巧,特别是在视频序列处理方面。 其他说明:评估日期明确为2024年春季学期初开始,并于三月底截止。成绩构成包括对采用方法合理性阐述占30%,具体编码执行效果占40%,最后还有15%取决于成果评价,剩下则是对于报告形式的要求如语言表述规范性和引用文献准确性方面的情况打分。所有提交均在线进行并且需要符合特定格式要求。
Delphi 12.3控件之Delphi12TMS WEB Core 2.6.0.0 Beta Retail Setup for D12 (September 24, 2024).rar
内容概要:本文档详细介绍了蚂蚁金服移动开发平台(mPaaS)及其各个核心子组件的构成和优势,涵盖移动网关(MGS)、移动推送(MPS)、移动分析(MAS)、移动同步(MSS)、实时发布(MDS)以及智能投放(MCDP)。各组件在提供基础能力的前提下分别具有不同特点。移动开发平台致力于为企业提供高可用、高效、稳定的一站式解决方案,并在架构、安全、灵活性等方面有着独特之处。 适用人群:移动应用开发商、产品经理、运维和技术专家、项目管理者以及其他相关人员。 使用场景及目标:通过提供一站式的移动开发方案,帮助企业更好地开发、管理和运维移动应用,降低技术门槛和发展成本,促进应用创新与发展。各组件具体应用于移动应用开发过程的不同环节中: 1. 开放移动服务能力:MGS用于建立统一的通信接口,简化移动端与服务端对接; 2. 移动信息即时触达:MPS用于实现移动推送,提供个性化消息通知; 3. 应用数据采集与分析:MAS用于大规模移动数据分析,辅助决策; 4. 数据增量推送及更新同步:MSS用于保证业务信息同步; 5. 提供高效的版本管理:MDS用于应用实时部署; 6. 支持灵活精准的投放运营:M
个人交友网站的主要使用者分为管理员和用户,实现功能包括管理员:个人中心、用户管理、交友信息管理、线下活动管理、活动报名管理、系统公告管理、论坛交流、系统管理,用户:个人中心、交友信息管理、活动报名管理、我的收藏管理,前台首页;首页、交友信息、线下活动、系统公告、论坛信息、我的、跳转到后台、客服等功能。由于本网站的功能模块设计比较全面,所以使得整个个人交友网站信息管理的过程得以实现。 本系统的使用可以实现本个人交友网站管理的信息化,可以方便管理员进行更加方便快捷的管理。 关键词:个人交友网站;JSP技术;MYSQL数据库;
自动鱼类计数器是一种用于精确计算通过特定区域(如鱼梯或鱼道)的鱼类数量的装置。这些设备使用传感器、摄像头或声波信号等各种技术,在鱼群游过时对其进行检测和计数。这些信息对于监测鱼类种群、评估洄游模式以及评估鱼类通道结构的有效性非常重要。自动鱼类计数器有助于研究人员和渔业管理人员就鱼类物种的保护和管理工作做出明智的决策。 据QYResearch调研团队最新报告“全球自动鱼计数器市场报告2024-2030”显示,预计2030年全球自动鱼计数器市场规模将达到0.6亿美元,未来几年年复合增长率CAGR为4.9%。 根据QYResearch头部企业研究中心调研,全球范围内自动鱼计数器生产商主要包括Vaki (MSD Animal Health )、Flatsetsund Engineering AS、Calitri Technology、AGK Kronawitter GmbH、Faivre、Fischtechnik International、Guangzhou Yuandian Intelligent Technology Co、Aquascan、Fu-Chen Auto Technology
最后一个win7稳定运行版本,支持视频和pdf查看,因为之前下载的别人打包好的文件,可以播放视频,但是打开pdf会闪退,所以自己编译了一个,有需要的可以试试
C# 打印模板,打印设计检测报告
本医院预约挂号系统采用的数据库是Mysql,使用JSP技术开发。在设计过程中,充分保证了系统代码的良好可读性、实用性、易扩展性、通用性、便于后期维护、操作方便以及页面简洁等特点。 关键词:医院预约挂号系统 ,JSP技术,Mysql数据库 通过标签分类管理等方式,实现管理员;个人中心、用户管理、科室信息管理、医生管理、出诊信息管理、预约时间段管理、挂号预约管理、问题反馈管理、问题解答管理、系统管理,用户;个人中心、挂号预约管理、问题反馈管理、问题解答管理、我的收藏管理、医生;个人中心、出诊信息管理、挂号预约管理、问题反馈管理、问题解答管理,前台首页;首页、科室信息、出诊信息、公告信息、我的、跳转到后台等信息管理功能,从而达到对医院预约挂号系统信息的高效管理。
2025年3月CCF编程能力认证(C++)五级.pdf
yolo
轻量级可扩展网址导航系统V2.45完美去授权版 系统亮点 1、采用光年全新v5模板开发后台 2、后台内置8款主题色,分别是简约白、炫光绿、渐变紫、活力橙、少女粉、少女紫、科幻蓝、护眼黑 3、可管理无数引导页主题并且主题内可以进行不同的自定义设置,目前内置16套主题 持续增加中… 4、可单独开发各种插件,插件可进行自定义设置,目前内置七款实用插件 5、无需安装解压部署即可使用 6、数据管理包采用易航原创JsonDb数据包 7、主题内置神奇的$this语法 可快速开发并保留著作版权 8、对前台URL进行伪静态重写 对搜索引擎更加友好 9、内置硬防洪和硬防墙插件 告别域名忧虑 10、系统全开源 告别后门风险
277.基于51单片机的电压比较器【点阵,数码管,串口】(仿真).pdf
太阳能光伏系统的优化模型预测MPPT控制|MATLAB|Simulink 通过固定步长预测控制技术实现光伏阵列MPPT
LCOH成本计算参数+文献资料
电子元器件防伪检测之拉曼光谱测试方法及其航空航天应用 内容概要:本文档详细介绍了利用拉曼光谱技术检测疑似假冒电气、电子和机电(Electrical, Electronic, and Electromechanical,EEE)元器件的方法和技术。文档首先阐述了拉曼光谱的基本原理,然后针对具体的操作流程提供了详细的指导。具体涵盖的内容有:不同波长激光对拉曼信号的影响与选择依据,频谱解析度的要求、荧光背景干扰解决办法、分散型与傅里叶变换拉曼光谱仪之间的对比以及激光衍射成像在拉曼显微镜的应用。同时明确了数据解释的标准,并且定义操作、认证和安全保障的要求。 适用人群:主要适用于对元器件进行质量评估的技术人员、质量控制经理和其他从事相关行业的从业人员。 使用场景及目标:主要用于检测假冒元器件,在实际生产和采购过程中保障供应链的质量。它有助于确保使用的元器件来自可靠的来源,从而减少生产中的故障率并提高成品可靠性。另外还包括实验室内部的质量管理和第三方审核等环节。 其他说明:本文件由SAE国际制定,每五年复审一次,旨在提供最先进且标准化的方法来应对假货威胁。此外还提供了具体的资格认证级别(如三级),
内容概要:本文详细介绍了华为应用市场在2022年采取的各种措施来提升安全性和保护用户隐私。华为不仅在应用上架前进行了严格的审核,还在应用上架后通过定期复测、增强防护等功能持续保障用户安全。具体来说,文中提及了超过百万款应用的上架审核、30万款次应用的复测以及针对用户隐私问题、广告问题等多项专项复测,显著提高了安全审核系统的智能化程度,并且开放了云测试和云调试等服务能力,帮助开发者优化应用质量。另外还特别强调对儿童和其他弱势群体的安全保护,提供了‘隐私标签’让用户对自己个人信息的流向有了更好的知情权和控制权。 适合人群:所有希望深入了解华为应用市场的安全机制及其对应用开发者和技术专家的合规要求的专业人士。 使用场景及目标:适用于对移动应用程序发布流程有兴趣的读者,特别是关注应用商店安全管理和用户隐私保护的专业从业者;企业可以在开发应用程序之前或期间参考此报告,以确保符合最新的标准和最佳实践。 其他说明:除了具体的技术手段介绍外,华为也表达了对于未来继续加强安全隐私工作的决心,承诺将会持续优化现有的措施并推出更多有助于维护健康的移动互联网生态系统的新特性。