对象在Hibernate中的三种状态
来源:互联网 发布:人卫版第八版教材知乎 编辑:程序博客网 时间:2024/05/22 14:54
转载来自:http://blog.csdn.net/llbupt/article/details/6227403
Hibernate中的对象有3种状态:Transient(瞬时),Persistent(持久)和Detached(托管)。
1 瞬时状态:
由new命令开辟内存空间的java对象,例如Student stu = new Student();如果没有变量对他引用,它将被JVM回收。瞬时对象在内存中孤立存在,他的意义仅是携带信息的载体,不和数据库中的数据有任何的关联。通过session的save()和saveOrUpdate()方法可以把一个瞬时对象与数据库相关联,并把瞬时对象携带的信息通过配置文件所做的映射插入到数据库中,这个瞬时对象就成了持久化对象,拥有和数据库记录相同的id标示(Hibernate自动将id赋予它)
瞬时对象的特点是:
(1)不和Session实例关联
(2)在数据库中没有和瞬时对象关联的记录
2 持久化状态:
持久的实例在数据库中有对应的记录,拥有一个持久化标识。持久对象总是与Session和Transaction相关联,在一个Session中,对持久对象的改变不会马上对数据库进行变更,而必须在Transaction终止,也就是执行commit()之后,才在数据库中真正运行SQL进行变更,持久对象的状态才会与数据库进行同步。在同步之前的持久对象成为脏(dirty)对象。
使用find(),get(),load()和iterater()等方法查询到得数据对象,都是持久化对象;如果一个瞬时对象被持久对象引用,则该对象也会自动变为持久对象。
如果使用delete()方法,它就会变为瞬时对象;当一个Session执行close()或clear()、evict()之后,持久对象就会变为托管对象。
持久对象的特点:
(1)和Session实例关联
(2)在数据库中有和持久对象关联的记录
3 托管状态:
与持久对象关联的Session被关闭后,对象就变为托管的。对托管对象的引用依然有效,对象可继续被修改。托管对象如果重新关联到某个新的Session上,会再次转变为持久的。托管状态期间的改动将会被持久化到数据库。
托管状态拥有数据库标识id,所以它可以通过update()、saveOrUpdate()和lock()等方法,再度与持久层关联。
托管对象的特点:
(1)本质上和瞬时对象相同
(2)只是比瞬时对象多了一个数据库记录标识值id
- 对象在Hibernate中的三种状态
- 对象在Hibernate中的三种状态
- 对象在Hibernate中的三种状态
- Hibernate学习-------对象在Hibernate中的三种状态
- hibernate中的对象的三种状态
- Hibernate对象三种状态
- hibernate 对象三种状态
- Hibernate 对象 三种状态
- Hibernate三种对象状态
- hibernate对象三种状态
- Hibernate对象三种状态
- hibernate对象三种状态
- hibernate中的三种状态
- Hibernate中的三种状态
- hibernate中实体对象的三种状态(生命周期中的三种状态)
- 浅谈对象在Hibernate中的状态
- hibernate中的对象状态
- Hibernate中的对象状态
- LeetCode OJ - Word Ladder
- 今日开通博客
- selenium设置Firefox自动下载
- jni生成so动态库,a静态库,传递中文字符串
- 0-1 背包 四种写法
- 对象在Hibernate中的三种状态
- 去除string中的指定字符
- 使用存储过程杂入杂出-出问题
- STL——multimap
- ListView 优化
- 二、Java设计模式——访问者模式
- C++中的static关键字
- CSS display & float详解
- 把python 数组,量化为从1开始的数组