Hibernate框架基础——在Hibernate中java对象的状态
来源:互联网 发布:vmware player for mac 编辑:程序博客网 时间:2024/06/06 14:14
在Hibernate中java对象的状态
Hibernate把对象分为4种状态:
- 临时状态
- 持久化状态
- 游离状态
- 删除状态
Session的特定方法能使对象从一个状态转换到另一个状态。
临时对象(transient)
- 在使用代理主键的情况下,OID通常为null。
- 不处于Session的缓存中。
Session里面是有一个集合的,这个集合我们称为Session的缓存,叫做一级缓存,它会引用Session要管理的对象。 - 在数据库中没有对应的记录。
在以下情况下,Java对象进入临时状态。
- 当通过new语句刚创建了一个Java对象,它处于临时状态,此时不和数据库中的任何记录对应。
持久化对象(也叫”托管”)(Persist)
- OID不为null。
- 位于Session缓存中。
- 持久化对象和数据库中的相关记录对应。
- Session在清理缓存时,会根据持久化对象的属性变化,来同步更新数据库。
- 在同一个Session实例的缓存中,数据库表中的每条记录只对应唯一的持久化对象。
Session的许多方法都能够触发Java对象进入持久化状态:
- Session的save()方法把临时对象转变为持久化对象。
- Session的load()或get()方法返回的对象总是处于持久化状态。
- Session的update()、saveOrUpdate()和lock()方法使游离对象转变为持久化对象。
- 当一个持久化对象关联一个临时对象,在允许级联保存的情况下,Session在清理缓存时会把这个临时对象也转变为持久化对象。
游离对象(也叫”脱管”)(Detached)
- OID不为null。
- 不再处于Session的缓存中。
- 一般情况下,游离对象是由持久化对象转变过来的,因此在数据库中可能还存在与它对应的记录。
- 修改此状态对象时数据库不会有变化。
Session的以下方法使持久化对象转变为游离对象:
- 当调用Session的close()方法时,Session的缓存被清空,缓存中的所有持久化对象都变为游离对象。如果在应用程序中没有引用变量引用这些游离对象,它们就会结束生命周期。
- Session的evict()方法能够从缓存中删除一个持久化对象,使它变为游离状态。当Session的缓存中保留了大量的持久化对象,会消耗许多内存空间,为了提高性能,可以考虑调用evict()方法,从缓存中删除一些持久化对象。
删除对象(Removed)
- OID不为null。
- 从一个Session实例的缓存中删除。
- 执行了delete()后的对象。
- Session已经计划将其从数据库删除,Session在清理缓存时,会执行SQL delete语句,删除数据库中的对应记录。
- 一般情况下,应用程序不该再使用被删除的对象。
对象的状态转换说明
对象的状态转换图:
对象的状态总结
Customer c=new Customer(); session.save(c); // 持久对象,但数据库中没有
游离状态 no 可能有(数据没有删除)也可能没有 0 0
- Hibernate框架基础——在Hibernate中java对象的状态
- 在Hibernate应用中Java对象的状态
- 在Hibernate应用中Java对象的状态
- 精通Hibernate——Hibernate中Java对象的状态详解
- Hibernate中java对象的状态
- hibernate中java对象的状态
- Hibernate应用中Java对象的状态
- Hibernate中java对象的状态
- Hibernate中java对象的状态
- Hibernate之hibernate中java对象的状态
- Hibernate框架基础——Java对象持久化概述
- Hibernate中对象的状态
- hibernate中对象的状态
- Hibernate中对象的状态
- 【java】——Hibernate持久化对象的三个状态
- Hibernate框架基础——操纵持久化对象的方法(Session中)
- 在hibernate中对象的几种状态
- java对象在hibernate持久层的状态
- HiHocoder 1036 : Trie图 AC自动机
- 10级台阶,一次一步或两步,打印所有的走法
- 【UML学习】--类图和对象图
- jquery自定义函数与参数
- C++ 判断IP是否属于局域网IP
- Hibernate框架基础——在Hibernate中java对象的状态
- C++:友元函数friend
- Leetcode 99 Recover Binary Search Tree
- 第五周-C语言 oj(1031)
- 汇编基础(三)
- MySql慢查询日志——开启/查看/删除
- #偷懒系列#大组数据切块
- UML类图几种关系的总结
- Mybatis学习记录一