hibernate实体有三个状态
1、瞬时状态
对象由new操作符创建,尚未与Session关联的对象被认为处于瞬态.瞬态对象不会持久化到数据库中,也不会被赋予持久化标识.而这个时候只在内存中存在,与数据库无关
2、持久状态
持久化实例在数据库中有对应的记录,并拥有一个持久化标识,持久化对象必须与指定的Session关联,
Hibernate会检测到处于持久化状态对象的改动,在当前操作完成时将对象数据写回数据库,开发者不用手动执行Update更新数据库,
这个时候内存中存在,数据库中也存在;
在修改持久状态的时候,不会去立即同步数据库,会先放入到一级缓存,当我们提交事务的时候 hibernate会把缓存与数据库同步(一定要事务的支持才会同步因为它是发了一个update语句)
3,游离状态
某个实例曾经处于持久化状态,但随着与之关联的Session被关闭,该对象就变成游离状态.游离状态的引用依然有效,对象可继续被修改.如果重新让游离状态与某个Session关联,该对象将重新转换为持久化状态,而托管期间的改动也可被写入数据库
这个时候在内存中存在,在数据库中不一定存在
HiberNate缓存
1、默认支持一级缓存,一级缓存是session级别
Session级别的一级缓存用于保存持久化实体,修改持久化实体时,
Session并不会立即把这种改变flush到数据库,而是缓存在当前Session的一级缓存中,
除非程序显式调用flush方法,或程序关闭Session时才会把这些改变一次性地flush到底层数据库.通过
Session缓存机制,可以减少与数据库的交互,从而提高数据库访问性能
<