【hibernate】持久化对象的三种状态
2017-02-17 20:50
253 查看
引言
上一篇博客中小编做了关于hibernate的小Demo,下面我们将深入研究hibernate持久化对象的三种状态。Hibernate持久化对象的三种状态
大家知道,java对象的生命周期,就是从new开始,到不再被任何引用变量引用结束,结束后将会被JVM的垃圾回收机制收回。在hibernate中,持久化的对象可以划分为三种状态:持久态(Persistent)、瞬时态(Transient)、脱管态(Detached)一、 持久态(Persistent)
1) 在session的缓存中,与session实例相关联2) 在数据库中存在与之相对应的记录
二、 瞬时态(Transient)
1)不在session的缓存中红,不与任何的session实例相关联2)在数据库中没有与之相对应的记录
三、 脱管态(Detached)
1)不在session的缓存中,不与任何的session实例相关联2) 在数据库中存在与之相对应的记录(前提条件是没有其他session实例删除该条记录)
这三种状态是可以相互转化,具体过程如下:
Transient
新new出来的对象,就是瞬时对象。在内存中孤立存在,它的意义是携带信息的载体,不和数据库的数据又任何关联。public void testSave1(){ Session session = null; Transaction tx = null; try{ session = HibernateUtils.getSession(); tx = session.beginTransaction(); //Transient状态 User3 user = new User3(); user.setName("邢玉1"); user.setPassword("123"); user.setCreateTime(new Date()); user.setExpireTime(new Date());
Persistent
通过session的save()或update()方法可以把一个瞬时对象与数据库相关联,并把瞬时对象携带的信息通过配置文件所做的映射插入到数据库中,这个瞬时对象就转换成了持久对象。//persistent状态 //persistent状态的对象,当对象的属性发生改变的时候, //hibernate在清理缓存(脏数据检查)的时候,会和数据库同步 session.save(user); user.setName("邢玉2"); tx.commit();
Detached
当一个session指定close()或clear,evict()之后,持久对象就变成了脱管对象。这时对象的id虽然拥有数据库识别值,但他们目前并不在Hibernate持久层的管理下,它与瞬时对象的本质是相同的,只不过比瞬时对象多了数据标识的id值。脱管对象的引用依然有效,对象可以继续被修改,当它重新被关联到某个新的Session上时,会再次变成持久对象(脱管状态期间的改动将被持久化到数据库上)。}catch(Exception e) { e.printStackTrace(); if(tx!= null){ tx.rollback(); } }finally{ HibernateUtils.closeSession(session); } //detached状态 }
三段代码连接来,就是持久化对象三种状态的转换过程。
总结
hibernate的学习还在路上,小编仍需继续努力!!相关文章推荐
- Hibernate之持久化对象的三种状态
- Hibernate持久化对象的三种状态
- 新手上路之Hibernate(三):持久化对象三种状态以及session的Get()与Load()区别
- 【hibernate进阶】hibernate持久化对象的三种状态
- Hibernate持久化对象的三种状态
- Hibernate持久化对象的三种状态
- ORM框架Hibernate (二) 持久化对象的三种状态分析
- hibernate中的PO持久化对象及PO三种状态
- 【SSH框架】--Hibernate持久化对象的三种状态
- Hibernate持久化对象存在三种状态
- Hibernate持久化对象三种状态的区分,以及save,update,saveOrUpdate,merge,persist等的使用
- Hibernate持久化对象的三种状态 .
- ORM框架Hibernate (二) 持久化对象的三种状态分析
- Hibernate持久化对象的三种状态
- Hibernate持久化对象的三种状态
- Hibernate持久化对象的三种状态
- hibernate持久化对象的三种状态
- Hibernate的save(transientInstance)引发的持久化对象三种状态思考
- 【Hibernate】——持久化对象的三种状态
- hibernate的持久化对象的三种状态