持久化对象的三种状态(hibernate的对象的三种持久化状态,并给出解释)

2025-03-16 09:30:02 0

持久化对象的三种状态(hibernate的对象的三种持久化状态,并给出解释)

本文目录

hibernate的对象的三种持久化状态,并给出解释

瞬时态:简单的说就是你在程序里面new一个对象,还没有和session关联持久态:对象和session有了关联,对象处于hibernate框架管理中游离态:在持久态的情况下,对象和session失去了关联,比如session.close()或session.flush()后,即游离态,但数据已经存储到了数据库

hibernate中transient,persistent,detached对象三者之间有什么区别

一、三种状态(Transient、Persistent、Detached)在Hibernate中有三种状态,对它的深入理解,才能更好的理解hibernate的运行机理,刚开始不太注意这些概念,后来发现它是重要的。对于理解hibernate,JVM和sql的关系有更好的理解。对于需要持久化的JAVA对象,在它的生命周期中有三种状态,而且互相转化。1, 临时状态(Transient):用new创建的对象,它没有持久化,没有处于Session中,处于此状态的对象叫临时对象; 2, 持久化状态(Persistent):已经持久化,加入到了Session缓存中。如通过hibernate语句保存的对象。处于此状态的对象叫持久对象; 3, 游离状态(Detached):持久化对象脱离了Session的对象。如Session缓存被清空的对象。特点:已经持久化,但不在Session缓存中。处于此状态的对象叫游离对象; ×√ 临时状态 (Transient) 持久化状态 (Persistent) 游离状态 (Detached) 是否处于Session缓存中 × √ × 数据库中是否有对应记录 × √ √游离对象和临时对象异同: 两者都不会被Session关联,对象属性和数据库可能不一致; 游离对象有持久化对象关闭Session而转化而来,在内存中还有对象所以此时就变成游离状态了;

Hibernate对象状态分类的详细说明

1.临时状态(transient):刚刚用new语句建立,还没有被持久化,不处于session的缓存中。处于临时状态的java对象称之为临时对象。2.持久化对象(persistent):已经被持久化,加入到session的缓存中。处于持久化状态的java对象被称之为持久化对象,会被session自动同步3.托管(游离)状态(detached):持久化对象关联的session关闭后处于托管状态,可以继续修改然后关联到新的session上,再次成为持久化对象,托管期间的修改会被持久化到DB。这使长时间操作成为可能

hiebernate 持久化状态在什么阶段

Hibernate里只说过对象有三种状态:临时状态、持久化状态和托管状态。但是并没有说对象处于持久化状态的时候,一定把数据持久化到数据库了。所谓的持久化状态,是指在一级缓存中已经生成了对象的代理,并且已经存在了数据库的唯一标识。此时它只是在数据库占有一席之位,并没有真正地占进去。只有当显示地执行对象的flush、session的close的时候,才会把缓存数据同步到数据库。

Hibernate 的三种状态 持久化 游离 临时 的关系

临时(Transient) - 由new操作符创建,且尚未与Hibernate Session 关联的对象被认定为临时(Transient)的。临时(Transient)对象不会被持久化到数据库中,也不会被赋予持久化标识(identifier)。 如果临时(Transient)对象在程序中没有被引用,它会被垃圾回收器(garbage collector)销毁。 使用Hibernate Session可以将其变为持久(Persistent)状态。(Hibernate会自动执行必要的SQL语句) 持久(Persistent) - 持久(Persistent)的实例在数据库中有对应的记录,并拥有一个持久化标识(identifier)。 持久(Persistent)的实例可能是刚被保存的,或刚被加载的,无论哪一种,按定义,它存在于相关联的Session作用范围内。 Hibernate会检测到处于持久(Persistent)状态的对象的任何改动,在当前操作单元(unit of work)执行完毕时将对象数据(state)与数据库同步(synchronize)。 开发者不需要手动执行UPDATE。将对象从持久(Persistent)状态变成瞬时(Transient)状态同样也不需要手动执行DELETE语句。 游离(Detached) - 与持久(Persistent)对象关联的Session被关闭后,对象就变为游离(Detached)的。 对游离(Detached)对象的引用依然有效,对象可继续被修改。游离(Detached)对象如果重新关联到某个新的Session上, 会再次转变为持久(Persistent)的(在Detached其间的改动将被持久化到数据库)。 这个功能使得一种编程模型,即中间会给用户思考时间(user think-time)的长时间运行的操作单元(unit of work)的编程模型成为可能。 我们称之为应用程序事务,即从用户观点看是一个操作单元(unit of work)。Hibernate中对象的游离状态是指Session关闭之后,持久化对象变成离线对象,离线对象就不能同数据库同步,也不再受Hibernate管理。操作 处于游离态对象 经常会报 session已关闭的错误。 举例有两个类, Team, Person. 映射关系是Team一对多Person, 采用lazy fetch策略。session beginTeam t = *Dao.get()session endt.getPersons()// 出错如果是用spring管理session的情况,事务外操作t.getPerons()也跟上面情况一样。这种情况在生产环境多表现为在jsp页面操作 t对象时出错。解决方法:1. 取消lazy fetch策略缺点:会导致过多的数据库访问,因为是一对多的情况。2. 在事务内就先把关联的对象取出缺点:会导致service层方法不统一,因为要分开取出与不取出的情况。3. 使用spring的 openSessionInview机制缺点: session打开的时间比较长, 使用不好可能会导致out of memory 一个游离态的对象转换为持久战态,有以下几种方法:1、session.saveOrUpdate(object)。这语句会把游离态的PO转为持久态的PO并提交给数据库2、session.merge(object)。这语句会把游离态的PO转为持久态的PO,并进行合并操作。3、session.lock(object, LockMode.NONE)。这语句只会把游离态的PO转为持久态PO,不作其他操作。不过,PO必须是没有修改过的,这方法挺适合做一个应用层。

hibernat中怎么将对象从游离状态变为托管状态

Hibernate持久化对象有三种状态:瞬时(transient)、持久(persistent)、托管(detached):瞬时(transient):一般是new出来的对象,且没被session管理,数据库中没有数据与之对应,超过作用域会被JVM垃圾回收器回收。 持久(persistent):数据库中有数据与之对应,纳入session管理,且session没有关闭,没有清理缓存;持久对象状态发生改变时hibernate会有记录,在清理缓存时会同步到数据库。脱管(detached):数据库中有与之对应的数据,但当前没有被session管理;托管对象状态发生改变,hibernate不能检测到。要讲对象从游离状态变为托管状态只要关闭session,清理缓存就可以了。回答如满意,请采纳。谢谢。。。

hibernate持久化对象的状态有哪些

一、综述

hibernate中的对象有三种状态,分别是TransientObjects(瞬时对象)、PersistentObjects(持久化对象)和DetachedObjects(托管对象也叫做离线对象)。

二、Hibernate对象三种状态转化图

三、Hibernate对象三种状态简介及转化条件:

(1)临时状态:

由Java的new命令开辟内存空间的java对象也就是普通的java对象,如果没有变量引用它它将会被JVM收回。简单的说就是程序里面new一个对象,还没有和session关联

(1.1)临时状态——》持久化状态:

临时对象在内存中是孤立存在的,它的意义是携带信息载体,不和数据库中的数据由任何的关联。通过Session的save()方法和saveOrUpdate()方法可以把一个临时对象和数据库相关联,并把临时对象携带的信息通过配置文件所做的映射插入数据库中,这个临时对象就成为持久化对象。

(2)持久化状态:

对象和session有了关联,对象处于hibernate框架管理中.持久化对象在数据库中都有相应的记录,持久化对象可以是刚刚被保存的,也可以是调用get或者load方法刚刚加载的,但都是在相关联的session生命周期中保存这个状态。如果是直接从数据库中查询所返回的数据对象,那这些对象和数据库中的字段相关联,具有相同的id,他们马上变成持久化对象。如果一个临时对象被持久化对象引用,也马上会变为持久化对象。

(2.1)持久化状态——》临时状态

使用delete()方法,持久化对象变为临时对象,并且删除数据库中相应的记录,这个对象不再与数据库有任何的联系。

(2.2)持久化状态——》离线对象

当一个session()执行close()、clear()、或evict()之后,持久化对象就变为离线对象,这时对象的id虽然拥有数据库的识别值,但已经不在Hibernate持久层的管理下,他和临时对象基本上一样的,只不过比临时对象多了数据库标识id。没有任何变量引用时,jvm将对其进行回收。

持久化对象总是与Session和事务(Transaction)关联在一起,在一个session中,对持久化对象的操作不会立即写到数据库,只有当Transaction(事务)结束时也就是提交事务执行commit方法的时候,才真正的对数据库更新,从而完成持久化对象和数据库的同步。在同步之前的持久化对象成为脏对象。

(3)托管对象(离线状态):

在持久态的情况下,对象和session失去了关联,比如session.close()或session.evite(obj) 后,即游离态,但数据已经存储到了数据库。Session关闭之后,与此Session关联的持久化对象就变成为脱管对象,可以继续对这个对象进行修改,如果脱管对象被重新关联到某个新的Session上,会在此转成持久对象。脱管对象虽然拥有用户的标识id,所以通过update()、saveOrUpdate()等方法,再次与持久层关联。

(3.2)离线状态——》临时状态

执行Delete方法。

四、代码演示:

 view plain copy print?

public class SessionTest extends TestCase {  

public void testSave1()  

{  

Session session = null;  

Transaction tx = null;  

try  

{              

session = HibernateUtils.getSession();//取得session.  

tx = session.beginTransaction();//开启事务. 返回 transient的一个实例.  

User user = new User();//这里通过new一个User类型的对象,产生一个Transient(临时)状态的对象.  

user.setName(“张三“);  

user.setPassword(“123“);  

user.setCreateTime(new Date());  

//缓存的时候(脏数据检查)的时候,会和数据库同步.  

session.save(user);//进行保存.执行save则对session进行管理,对象变为持久化状态.发出insert语句,自动生成user表的标识id值  

user.setName(“李四“);//持久化(persistent)状态的对象.会发出update语句,当对象的属性发生改变的时候,hibernate在清理          

tx.commit();//进行提交,关闭事务.  

}catch(Exception e)  

{  

e.printStackTrace();  

if(tx!=null)  

{  

// 事务回滚.  

tx.rollback();  

}  

}finally  

{  

HibernateUtils.closeSession(session);//关闭session.当关闭session后处于Detached(离线)状态.  

}  //这时候,就不能再用以前的session了再想将此对象变为持久化对象需要重新得到新的session,开启事务,将此对象纳入session管理         

}  

日志记录:

 view plain copy print?

Hibernate: insert into User (name,password,createTime) values (?,?,?,?)  

Hibernate: update User set name=?,password=?,createTime=? where id=?  

持久化对象的三种状态(hibernate的对象的三种持久化状态,并给出解释)

本文编辑:admin

更多文章:


如何用编程做出可以用浏览器搜到的网站?编程网站Glitch现在发展如何

如何用编程做出可以用浏览器搜到的网站?编程网站Glitch现在发展如何

本文目录如何用编程做出可以用浏览器搜到的网站编程网站Glitch现在发展如何如何用编程做出可以用浏览器搜到的网站不是浏览器,准确说是搜索引擎收录搜索引擎收录网站的规则就是你的网站内关键词跟网民搜索的关键词匹配,而且你的网站正常打开,以及最近

2025年2月28日 01:10

flv js(如何看待哔哩哔哩的 flv.js 作者月薪不到 5000 元)

flv js(如何看待哔哩哔哩的 flv.js 作者月薪不到 5000 元)

本文目录如何看待哔哩哔哩的 flv.js 作者月薪不到 5000 元如何将flv格式转换成js格式有软件吗flv.js必须依赖node.js吗如何看待哔哩哔哩的 flv.js 作者月薪不到 5000 元小明和小龙交流,小明脑子里有内容.这个

2025年2月13日 06:50

java实现socket通信(请问Socket、Servlet、Tomcat是如何通信的)

java实现socket通信(请问Socket、Servlet、Tomcat是如何通信的)

本文目录请问Socket、Servlet、Tomcat是如何通信的如何使用Socket在客户端实现长连接请问Socket、Servlet、Tomcat是如何通信的socket是java实现tcp/ip协议组的抽象,也就是说在java环境中,

2025年4月4日 10:40

uninstall是什么意思英语(uninstall啥意思)

uninstall是什么意思英语(uninstall啥意思)

本文目录uninstall啥意思卸载英文是什么Uninstall这个单词是什么意思怎么读卸载软件出来的英文uninstall啥意思uninstall的意思是:卸载软件或解除安装。英  相关短语Uninstall Programs 卸载程序Q

2025年2月21日 22:20

c语言背包问题(C语言算法求助:背包问题)

c语言背包问题(C语言算法求助:背包问题)

本文目录C语言算法求助:背包问题c语言的穷举法的背包问题背包问题C语言简短代码,大神们最好带解释和注释,谢谢!!!背包问题,C语言编程C语言:背包问题(数据结构)用C语言实现背包问题求解背包问题(C语言)C语言算法求助:背包问题//如果每种

2025年3月18日 06:40

用c语言画一朵花(用C语言输出一束鲜花)

用c语言画一朵花(用C语言输出一束鲜花)

本文目录用C语言输出一束鲜花如何用C语言画一个“心形”如何用c语言画爱心急!请问,如何用C语言画一个五角星(用*组成)怎么用c语言画函数图像C语言如何画图用C语言程序编出漂亮的图画用C语言输出一束鲜花我以前划过一箭穿心,就是一个箭头,穿过两

2025年4月1日 16:00

oracle10g客户端安装(如何安装PHP和Oracle 10g即时客户端)

oracle10g客户端安装(如何安装PHP和Oracle 10g即时客户端)

本文目录如何安装PHP和Oracle 10g即时客户端谁有Oracle 10g安装过程,步骤,越详细越好 (win7环境下)如何安装oracle10g客户端win7 安装oracle10g客户端报错 未知的程序入口点oracle 10g安装

2025年3月15日 05:20

css45度倾斜移动(CSS怎么把div里的图形倾斜,而文字不倾斜)

css45度倾斜移动(CSS怎么把div里的图形倾斜,而文字不倾斜)

本文目录CSS怎么把div里的图形倾斜,而文字不倾斜CSS过渡中的变形效果中的平移translate,旋转,rotate,倾斜,skew怎么搞啊css怎么设置图片定点旋转CSS怎么把div里的图形倾斜,而文字不倾斜《div class=“w

2025年3月25日 09:10

websocket传输视频(如何通过WebSocket连接服务器进行数据传输)

websocket传输视频(如何通过WebSocket连接服务器进行数据传输)

本文目录如何通过WebSocket连接服务器进行数据传输websocket 怎么传送大数据websocket怎么传送文件如何通过WebSocket连接服务器进行数据传输WebSocket是HTML5开始提供的一种浏览器与服务器间进行全双工通

2025年3月18日 10:20

格式刷在哪里(手机版excel格式刷在哪里)

格式刷在哪里(手机版excel格式刷在哪里)

本文目录手机版excel格式刷在哪里word 格式刷在哪里ppt格式刷在哪wps 中ppt里面的格式刷在哪cad2021格式刷在哪手机wps的格式刷在哪wps中的格式刷在哪里手机版excel格式刷在哪里 在手机wps表格中使用格式刷的方法 

2025年3月7日 08:50

软件架构师工资一般多少(java高级软件工程师工资收入多少)

软件架构师工资一般多少(java高级软件工程师工资收入多少)

本文目录java高级软件工程师工资收入多少什么工作高薪微软各职位员工年收入有多高java高级软件工程师工资收入多少Java有一定基础的,会Javaweb开发(html,cssjs,jquery)可以独立开发完整前端页面和特效的月薪3K+懂J

2025年2月11日 15:00

fifo指的是什么?fifo是什么意思

fifo指的是什么?fifo是什么意思

本文目录fifo指的是什么fifo是什么意思什么是FIFOfifo指的是什么FIFO(数据结构中的先入先出队列)一般指先入先出队列。First Input First Output的缩写,先入先出队列,这是一种传统的按序执行方法,先进入的指

2025年2月28日 03:20

journeyed(journry是什么意思 )

journeyed(journry是什么意思 )

本文目录journry是什么意思 journey是什么意思journey是抽象名词吗j0urney的中文翻译是什么意思trip、journey和travel的区别journey的中文是什么gourney是什么意思journry是什么意思 j

2025年3月11日 20:00

redhat 6 4 下载(如何在vmvare中安装redhat linux6虚拟机)

redhat 6 4 下载(如何在vmvare中安装redhat linux6虚拟机)

本文目录如何在vmvare中安装redhat linux6虚拟机linux redhat 6.4 安装oracle 12c需要哪些安装包如何在vmvare中安装redhat linux6虚拟机步骤如下: 一、准备工作: 1、下载安装VMwa

2025年3月24日 10:10

求个网站这么难吗2021年(弄个网站就这么难吗)

求个网站这么难吗2021年(弄个网站就这么难吗)

本文目录弄个网站就这么难吗创建一个网站难吗弄个网站就这么难吗你被骗了我以前也被骗了不过现在找了家安全点的空间商。个人觉得虚拟主机供应商要找稳定 服务好 功能强大,速度好的空间。我自己也做网站建设的。做过几家的代理商。去年开始用 中国网创 的

2025年3月26日 06:50

文本文档转换成excel(word文档的数据怎么转换成excel)

文本文档转换成excel(word文档的数据怎么转换成excel)

本文目录word文档的数据怎么转换成excel怎么把word文档转成excelword文档怎么转换成excel文档文本转换成excel表格文本如何转换成excel如何将word文本转化为excel文本格式数据怎么转换成excel列表word

2025年4月3日 19:40

tcp ip参考模型(我想知道TCP/IP参考模型与tcp/ip协议是一个概念吗)

tcp ip参考模型(我想知道TCP/IP参考模型与tcp/ip协议是一个概念吗)

本文目录我想知道TCP/IP参考模型与tcp/ip协议是一个概念吗简要说明TCP/IP参考模型五个层次的名称各层的信息传输格式最低三层使用的设备是什么什么是TCP/IP参考模型TCP/IP网络参考模型有哪几层osi参考模型与tcp/ip模型

2025年2月11日 03:40

linux字符终端中怎么用快捷键切换用户?在linux字符终端下,使用caps/lock切换大写字母,会有提示信息!影响输入,有什么方法可以取消如图

linux字符终端中怎么用快捷键切换用户?在linux字符终端下,使用caps/lock切换大写字母,会有提示信息!影响输入,有什么方法可以取消如图

本文目录linux字符终端中怎么用快捷键切换用户在linux字符终端下,使用caps/lock切换大写字母,会有提示信息!影响输入,有什么方法可以取消如图linux安装完运行startx出来的是终端字符的界面不是图形界面怎么办怎么把字符终端

2025年3月21日 11:30

in terms of什么意思(请问日常生活中“in terms of“的主要意思是什么)

in terms of什么意思(请问日常生活中“in terms of“的主要意思是什么)

本文目录请问日常生活中“in terms of“的主要意思是什么in terms of 是什么意思呀,如何用请问日常生活中“in terms of“的主要意思是什么就。。。。而言,说道。。。, 有关。。。He is strong in te

2025年4月3日 03:00

radio是什么意思啊(radio是什么意思)

radio是什么意思啊(radio是什么意思)

本文目录radio是什么意思radio的中文是什么意思啊车上的RADIO是什么意思radio是什么意思radion.无线电, 收音机radio源自拉丁词radius射线,因为无线电与射线有关nradios 无线电通讯police talki

2025年2月13日 13:30

近期文章

living proof(living proof shampoo是什么)
2025-04-04 15:20:01
本站热文

harbor,port,pier的区别?谁能解释“harbour“(港口)与“pier“(码头)的区别
2025-02-22 17:40:03 浏览:18
ibatis foreach(ibatis 批量update操作)
2025-02-10 23:40:06 浏览:7
endless rain(endless rain表达什么情感)
2025-02-14 06:00:02 浏览:6
标签列表

热门搜索