hibernate的一级缓存

* session级别的缓存,hibernate默认必须使用的缓存。
* 默认情况:transaction.commit();将进行 一级缓存数据 与 快照数据 比较
* 如果一致,没有任何操作
* 如果不一致,将数据更新到数据库,并同步到一级缓存
* FlushMode 刷新模式,何时将一级缓存中的数据刷新到数据库中?
* PO类编写实现接口:Serializable 
* 取值:
ALWAYS ,一直刷,使用query查询、执行flush方法,事务的提交,就会刷新。底层没有数据不一致判断
AUTO ,默认值,自动,使用query查询、执行flush方法,事务的提交,就会刷新。进行判断
COMMIT ,使用query查询不刷新,执行flush方法,事务的提交刷新
MANUAL ,手动,只有执行flush才刷新。
* 操作持久对象的方法
* 清除缓存
flush:将缓存中的数据,刷新到数据库
clear:清空缓存中的数据
evict:将指定对象从一级缓存移除
* save
把瞬时对象加入到 Session 缓存中, 使它进入持久化状态
选用映射文件指定的标识符生成器, 为持久化对象分配唯一的 OID
计划执行一条 insert 语句,把PO对象当前的属性值组装到insert语句中
* update
1使一个脱管对象转变为持久化对象, 并且计划执行一条 update 语句
2如果更新的数据没有改变,将再次执行一条update语句
可以通过<class select-before-update="true">更新前先查询,如果没有改变,将不执行update语句
3当 update() 方法关联一个脱管对象时, 如果在 Session 的缓存中已经存在相同 OID 的持久化对象, 会抛出异常
4当 update() 方法关联一个脱管对象时, 如果在数据库中不存在相应的记录, 也会抛出异常
* saveOrUpdate
如果参数是瞬时对象就用save方法
如果参数是脱管对象就用update方法
如果参数是持久化对象就直接返回
默认情况下,通过OID的值为null,来区分瞬时、脱管、持久对象
通过<id unsaved-value="">类修改的划分依据
* delete
既可以删除一个脱管对象, 也可以删除一个持久化对象
计划执行一条 delete 语句
* 通过OID查询对象
* get  :立即查询指定对象,如果对象不存在返回null
* load :默认情况下,生成代理对象,延迟查询指定对象,如果对象不存在将抛异常

你可能感兴趣的:(hibernate的一级缓存)