Hibernate应用中Java对象的状态
2012-07-21 14:20
302 查看
Hibernate应用中Java对象的状态
当应用程序通过new语句创建了一个对象,这个对象的生命周期就开始了,当不再有任何引用指向它的时候,这个对象就结束生命周期,它占用的内存就可以被JVM的垃圾回收器回收
对于需要被持久化的Java对象,在它的生命周期中。可处于以下三个状态之一
瞬时状态(临时状态) transient:刚刚用new创建,还没有被持久化,不处于Session的缓存中,处于临时状态的Java对象被称为临时对象(无数据、无Session)
持久化状态 persistent:已经被持久化,加入到Session的缓存中。处于持久化状态的Java对象被称为持久化对象(有数据,有Session)
游离状态 detached:已经被持久化,但不再处于Session的缓存中。处于游离状态的Java对象被称为游离对象(有数据,无Session)
临时状态的特征:
不处于Session的缓存中,也可以说,不被任何一个Session实例关联
在数据库中没有对应的记录
在以下情况下,Java对象进入临时状态
当通过new语句创建了一个Java对象,它处于临时状态,此时不和数据库中的任何记录对应
Session的delete()方法能使一个持久化对象或游离对象转变为临时对象。对于游离对象,delete()方法从数据库中删除与它对应的记录;对于持久对象,delete()方法从数据库中删除与它对应的记录,并且把它从Session的缓存中删除
持久化对象的特征:
位于一个Session实例的缓存中,也可以说,持久化对象总是被一个Session实例关联
持久化对象和数据库中的相关记录对应
Session在清理缓存时,会根据持久化对象的属性变化,来同步更新数据库
Session的许多方法都能够触发Java对象进入持久化状态
Session的save()方法把临时对象转变为持久化对象
Session的load()或get()方法返回的对象总是处于持久化状态
Session的list()方法返回的List集合中存放的都是持久化对象
Session的update()、saveOrUpdate()使游离对象转变为持久化对象
当一个持久化对象关联一个临时对象,在允许级联保存的情况下,Session在清理缓存时会把这个临时对象也转变为持久化对象
游离对象的特征:
不再位于Session的缓存中,也可以说,游离对象不被Session关联
游离对象是由持久化对象转变过来的,因此在数据库中可能还存在与它对应的记录(前提条件是没有其他程序删除了这条记录)
当应用程序通过new语句创建了一个对象,这个对象的生命周期就开始了,当不再有任何引用指向它的时候,这个对象就结束生命周期,它占用的内存就可以被JVM的垃圾回收器回收
对于需要被持久化的Java对象,在它的生命周期中。可处于以下三个状态之一
瞬时状态(临时状态) transient:刚刚用new创建,还没有被持久化,不处于Session的缓存中,处于临时状态的Java对象被称为临时对象(无数据、无Session)
持久化状态 persistent:已经被持久化,加入到Session的缓存中。处于持久化状态的Java对象被称为持久化对象(有数据,有Session)
游离状态 detached:已经被持久化,但不再处于Session的缓存中。处于游离状态的Java对象被称为游离对象(有数据,无Session)
程序代码 | Person对象的生命周期 | Person对象的状态 |
tx=session.beginTransaction(); Person person=new Person(“张三”); | 开始生命周期 | 临时状态 |
session.save(person); | 处于生命周期中 | 转变为持久化状态 |
Long id=person.getId(); person=null; Person person2=(Person)session.load(Person.class,id); tx.commit(); | 处于生命周期中 | 处于持久化状态 |
session.close() | 处于生命周期中 | 转变为游离状态 |
System.out.println(person2.getName()); | 处于生命周期中 | 处于游离状态 |
person2=null; | 结束生命周期 | 结束生命周期 |
不处于Session的缓存中,也可以说,不被任何一个Session实例关联
在数据库中没有对应的记录
在以下情况下,Java对象进入临时状态
当通过new语句创建了一个Java对象,它处于临时状态,此时不和数据库中的任何记录对应
Session的delete()方法能使一个持久化对象或游离对象转变为临时对象。对于游离对象,delete()方法从数据库中删除与它对应的记录;对于持久对象,delete()方法从数据库中删除与它对应的记录,并且把它从Session的缓存中删除
持久化对象的特征:
位于一个Session实例的缓存中,也可以说,持久化对象总是被一个Session实例关联
持久化对象和数据库中的相关记录对应
Session在清理缓存时,会根据持久化对象的属性变化,来同步更新数据库
Session的许多方法都能够触发Java对象进入持久化状态
Session的save()方法把临时对象转变为持久化对象
Session的load()或get()方法返回的对象总是处于持久化状态
Session的list()方法返回的List集合中存放的都是持久化对象
Session的update()、saveOrUpdate()使游离对象转变为持久化对象
当一个持久化对象关联一个临时对象,在允许级联保存的情况下,Session在清理缓存时会把这个临时对象也转变为持久化对象
游离对象的特征:
不再位于Session的缓存中,也可以说,游离对象不被Session关联
游离对象是由持久化对象转变过来的,因此在数据库中可能还存在与它对应的记录(前提条件是没有其他程序删除了这条记录)
相关文章推荐
- 在Hibernate 应用中的Java对象的状态
- 在Hibernate应用中Java对象的状态
- 单篇 Hibernate应用中Java对象的状态
- Hibernate应用中Java对象的状态
- 在Hibernate应用中Java对象的状态
- Hibernate中Java对象的三种状态
- java对象在hibernate持久层的状态
- Hibernate之hibernate中java对象的状态
- Java对象在Hibernate持久化层的状态
- Hibernate的JAVA对象的3种状态
- hibernate 中java对象的三种状态
- Java Hibernate中的对象状态
- Hibernate的JAVA对象的3种状态
- hibernate中的java对象有几种状态,其相互关系如何(区别和相互转换)
- 【java】——Hibernate持久化对象的三个状态
- hibernate中java对象的状态
- Hibernate中java对象的状态
- Java程序员从笨鸟到菜鸟之(六十二)细谈Hibernate(十三)session缓存机制和三种对象状态
- hibernate中的java对象有几种状态,其相互关系如何(区别和相互转换)
- Hibernate中java对象的状态