1、临时状态
临时对象的特征:
不处于session缓存中也就是说不被任务一个session实例关联;
在数据库中没有对应的记录;
在以下情况下会进入临时状态:
当通过new 语句刚创建一个对象时,它处于临时状态,此时不和数据库中任何记录对应。
session的delete()可以使一个持久化对象或游离对象变为临时对象,对于游离对象delete()方法从数据库中删除它对应的记录,对于持久化对象delete()从数据库中删除与它对应的记录并把它从session缓存中清除。
2、持久化状态
持久化对象的特征:
位于一个session实例的缓存中,也可以说持久化对象总是被一个session实例关联。
持久化对象和数据库中的相关记录对应。
session在清理缓存时,会根据持久化对象属性的变化来同步更新数据库。
session的许多方法都能触发java对象进入持久化状态:
session的save方法可以把临时对象转变为持久化状态
session的load 方法可以把临时对象转变为持久化状态
session的find方法返回的list集合中存放的都是持久化对象
session的update saveorupdate lock方法使游离状态对象转变为持久化对象
当一个持久化对象关联一个临时对象 ,在允许级联保存时session在清理缓存时会把这个临时对象转变为持久化对象。
3、游离状态
游离对象的特征:
不在位于session的缓存中,也可以说不在被session实例关联
游离对象是由持久化对象转变过来 的因此在数据库中还存在与它相关的记录(前提是没有其它程序删除这条记录)
session 的以下方法使对象转变为游离状态:
当调用close方法时session的缓存被清空 缓存中的持久对象转变为游离对象如果程序中没有引用变量引用这些游离对象 这些游离对象将结束生命周期
session的evict方法可以从缓存中删除一个持久化对象使它变为游离对象,当session缓存中存放了大量持久化对象时会消耗许多内存空间,为了提高性能可以考虑使用evict方法