1.Hibernate中对象的状态分为三种:
瞬时状态:无id无Session绑定
持久状态:有id有Session绑定
托管/游离态:有id无Session绑定
其中id指的是表中的主键属性值
瞬时状态:
- 例如 Student stu = new Student( );
- 通过new关键字新建出来的对象就是瞬时状态,因为stu目前只是通过JVM分配了一块内存空间的对象并未进入Hibernate的缓存管理,同时在数据库中没有与它相对应的记录。
- 通过Hibernate中的delete方法删除后的对象将会从 持久态 --> 瞬时态。
- 无id主键
- 无Session关联
持久化状态:
- 持久对象是已经保存进数据库的实体对象,并且该对象也还在Hibernate的缓存管理当中。那么只要对该对象进行任何修改,都会在清理缓存前自动同步到数据库中保存。
- 常见的 瞬时状态 --> 持久状态的操作有save ( ),saveOrUpdate( );游离/托管状态 -->持久状态 使用update( );
- 通过find( ),get( ),load( ),iterate( )等方法查询到的对象也会成为持久化对象。
- 与Session有关联
- 在数据库中有相关联的记录(有主键id)
游离/托管状态:
- 当持久化状态对象脱离了Hibernate的缓存管理以后,它就变为游离状态,但是它在数据库中仍然有一条相对应的记录,简单的说就是比瞬时状态的对象多了一个id。
- 执行close( ),clear( ),evict( )后持久化对象会变为游离托管对象。
引用网络上找到的图片: