一.Session的参与
- 普通对象就两种状态:new出一个对象,还有生命的状态;不被任何变量引用,被GC回收,死亡状态。
- 本文讨论的三种状态:在hibernate session的干预下,在这个对象和数据库的某条记录相关联的条件下,“new出一个对象,还有生命的状态”会演变成三种更加具体的状态:临时状态transient,持久化状态persistent,游离状态detached。
二. 临时状态
刚刚new出一个实体对象的时候,该对象未和任一条数据库记录想关联(也就是对象未和任何一个session相关联,对象没有主键这一持久化标识),此时的状态时临时状态。
- 临时状态的特点:
- 未和任何session相关联。
- 未和任一条数据库记录相关联。
- 临时状态的转换
- new一个对象,此对象处于临时状态。
- session.delete(持久化对象或者游离状态对象)时,持久化对象或者游离状态对象变成临时状态对象。对于持久化对象,delete删除其在数据库对应的记录,并删除此对象在session中的缓存;对于游离态对象,delete删除其在数据库对应的记录。
三. 持久化状态
持久化对象是指实体对象处于由Hibernate框架所管理的状态,实体对象被纳入Hibernate实体容器中加以管理。
- 持久化状态的特点
- 持久对象总是与Session和Transaction相关联,在一个Session中,对持久对象的改变不会马上对数据库进行变更,而必须在Transaction终止,也就是执行commit()之后才在数据库中真正运行SQL进行变更,持久对象的数据才会与数据库进行同步。同步之前的持久对象称为脏(dirty)对象
- 数据库里面有某一条记录与持久化对象相对应。
- 持久化状态的转换
- session的save()方法把对象从临时状态转换成持久化状态。
- session的load()方法和get()方法返回的对象也是持久化状态。
- session的find()方法返回的list对象也是持久化状态。
- session的update() saveorUpdate() lock()方法是对象从游离状态转换持久化状态。
- 一个持久化状态对象级联一个临时状态对象,保存这个持久化状态时,同时会保存这个临时状态,临时状态对象转换成持久化状态对象。
四.游离状态
与持久对象关联的session被关闭后,对象就变成游离状态。
- 游离状态的特点
- 不被任何session关联;如果没有变量引用此对象的情况下,GC回收此对象。这个和临时状态是一样的。
- 比临时状态多了一个与数据库标识的OID。
- 游离状态的转换
- session.close()方法,finally里面会调用persistenceContext.clear(),导致session的缓存被清空,所有的持久化对象变成游离态对象。
- session.evict(Object obj)方法,清空一个对象,该对象由持久态变成游离态。当session中保存了大量缓存对象时,手动调用evict(Object ob)方法可以减少缓存,但不推荐。
- session.clear(),会调用persistenceContext.clear(),清空所有缓存。
五.总结
以下面一张状态转换图作为总结,图片来源无从考证,在此谢谢绘图者。
分享到:
相关推荐
8.3 Java对象在Hibernate持久化层的状态 8.3.1 临时对象的特征 8.3.2 持久化对象的特征 8.3.3 被删除对象的特征 8.3.4 游离对象的特征 8.4 Session接口的详细用法 8.4.1 Session的save()和persist()...
SSH笔记-Hibernate对象的状态转换,对象状态区分,对象状态转换方法
Java面试题57.hibernate对象状态及其转换.mp4
hibernate 一级缓存、 持久化对象状态和转换、 多表映射操作
8.3 Java对象在Hibernate持久化层的状态 8.3.1 临时对象的特征 8.3.2 持久化对象的特征 8.3.3 被删除对象的特征 8.3.4 游离对象的特征 8.4 Session接口的详细用法 8.4.1 Session的save()和persist()...
8.3 Java对象在Hibernate持久化层的状态 8.3.1 临时对象的特征 8.3.2 持久化对象的特征 8.3.3 被删除对象的特征 8.3.4 游离对象的特征 8.4 Session接口的详细用法 8.4.1 Session的save()和persist()...
hibernate介绍,hibernate.cfg.xml配置,hbm.xml映射文件详解,主键生成策略使用,PO对象状态及状态的转换分析、一级缓存,Hibernate数据检索技术,Hibernate高级映射技术,Hibernate多表联合查询, Hibernate二级...
8.3 Java对象在Hibernate持久化层的状态 8.3.1 临时对象的特征 8.3.2 持久化对象的特征 8.3.3 被删除对象的特征 8.3.4 游离对象的特征 8.4 Session接口的详细用法 8.4.1 Session的save()和persist()...
java工程师
hibernate介绍,hibernate.cfg.xml配置,hbm.xml映射文件详解,主键生成策略使用,PO对象状态及状态的转换分析、一级缓存,Hibernate数据检索技术,Hibernate高级映射技术,Hibernate多表联合查询, Hibernate二级...
hibernate介绍,hibernate.cfg.xml配置,hbm.xml映射文件详解,主键生成策略使用,PO对象状态及状态的转换分析、一级缓存,Hibernate数据检索技术,Hibernate高级映射技术,Hibernate多表联合查询, Hibernate二级...
主要介绍了浅谈Hibernate对象状态之间的神奇转换,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
hibernate介绍,hibernate.cfg.xml配置,hbm.xml映射文件详解,主键生成策略使用,PO对象状态及状态的转换分析、一级缓存,Hibernate数据检索技术,Hibernate高级映射技术,Hibernate多表联合查询, Hibernate二级...
hibernate介绍,hibernate.cfg.xml配置,hbm.xml映射文件详解,主键生成策略使用,PO对象状态及状态的转换分析、一级缓存,Hibernate数据检索技术,Hibernate高级映射技术,Hibernate多表联合查询, Hibernate二级...
hibernate介绍,hibernate.cfg.xml配置,hbm.xml映射文件详解,主键生成策略使用,PO对象状态及状态的转换分析、一级缓存,Hibernate数据检索技术,Hibernate高级映射技术,Hibernate多表联合查询, Hibernate二级...
hibernate介绍,hibernate.cfg.xml配置,hbm.xml映射文件详解,主键生成策略使用,PO对象状态及状态的转换分析、一级缓存,Hibernate数据检索技术,Hibernate高级映射技术,Hibernate多表联合查询, Hibernate二级...
hibernate介绍,hibernate.cfg.xml配置,hbm.xml映射文件详解,主键生成策略使用,PO对象状态及状态的转换分析、一级缓存,Hibernate数据检索技术,Hibernate高级映射技术,Hibernate多表联合查询, Hibernate二级...
hibernate介绍,hibernate.cfg.xml配置,hbm.xml映射文件详解,主键生成策略使用,PO对象状态及状态的转换分析、一级缓存,Hibernate数据检索技术,Hibernate高级映射技术,Hibernate多表联合查询, Hibernate二级...
hibernate介绍,hibernate.cfg.xml配置,hbm.xml映射文件详解,主键生成策略使用,PO对象状态及状态的转换分析、一级缓存,Hibernate数据检索技术,Hibernate高级映射技术,Hibernate多表联合查询, Hibernate二级...