java对象在Hibernate中的状态
1. 临时状态(transient):刚用new语句创建,还没有被持久化,并且不处于Session缓存中.临时对象.
2. 持久化状态(persistent):已经被持久化,并且加入到Session的缓存中.持久化对象.
3. 删除状态(removed):不再处于Session的缓存中,并且Session已经计划将其从数据库中删除,被删除对象.
4. 游离状态(detached):已经被持久化,但不再处于Session的缓存中.游离对象.
临时对象的特征
1. 使用代理主键的情况下,OID通常为null.
2. 不处于Session的缓存中,即不被任何一个Session实例关联.
3. 在数据库中无对应记录.
在以下状态下,Java对象进入临时状态
1. 当通过new语句刚创建一个Java对象,此时处于临时状态,不和数据库中的任何记录对应.
2. 在Hibernate配置文件中的hibernate.use_identifier_rollback属性为true的情况下,Session的delete()方法能使一个持久化对象或游离对象转变为临时对象.
持久化对象的特征
1. OID不为null.
2. 位于一个Session实例的缓存中,即总是被一个Session实例关联.
3. 持久化对象和数据库中的相关记录对应.
4. Session在清理缓存时,会根据持久化对象的属性变化,同步更新数据库.
使Java对象进入持久化状态
1. Session的save()方法把临时对象转变为持久化对象.
2. Session的load()或get()方法返回的对象总是处于持久化状态.
3. Query的list()方法返回的List集合中存放的都是持久化对象.
4. Session的update(),saveOrUpdate(),lock()方法使游离对象转变为持久化对象.
5. 当一个持久化对象关联一个临时对象,在允许级联保存的情况下,Session在清理缓存时会把这个临时对象也转变为持久化对象.
被删除对象的特征
1. OID不为null.
2. 从一个Session实例的缓存中删除.
3. 被删除对象和数据库中的相关记录对应.
4. Session已经计划将其从数据库中山喊出.
5. Session在清理缓存时,会执行SQL DELETE语句,删除数据库中的相应记录.
6. 一般情况下,应用程序不应该再使用被删除的对象.
以下情况Java对象进入删除状态
1. 在Hibernate配置文件中的hibernate.use_identifier_rollback属性取默认值false的情况下,Session的delete()方法吧持久化对象及游离对象转变为被删除对象.
2. 当一个持久化对象A关联一个持久化对象B,在允许级联删除的情况下,Session删除持久化对象A时,会级联删除持久化对象B,使得持久化对象Ahead持久化对象B都进入删除状态.
游离对象特征
游离对象有以下特征
1. OID不为null.
2. 不再位于Session的缓存中,即不被Session关联.
3. 游离对象是由持久化对象转变过来的,因此在数据库中可能还存在与它对应的记录(前提是没有其它程序删除这条记录)
Session的以下方法时持久化对象转变为游离对象
1. 当调用Session的close()方法时,Session的缓存被清空,缓存中所有持久化对象都变为游离对象.如果在应用程序中没有引用变量引用这些游离对象,它们就会结束生命周期.
2. Session的evict()方法能够从缓存中清除一个持久化对象,使它变为游离对象.
3. Session的clear()方法能够清除缓存中的所有持久化对象.