3.3 操作session缓存
Hibernate提供个方法操作session缓存:
- flush :使数据表中的记录和SESSION缓存中的对象的状态保持一致。为了保持一致,则可能会发送对应的SQL语句
- refresh : 会强制发送SELECT语句,以使Session缓存中的数据与数据库中的数据一致
- clear : 清空session缓存
3.3.1 flush方法
flush:Session按照缓存中对象的属性变化来同步更新数据库
- 默认情况下Session在以下时间点刷新缓存:
- 显式调用 Session 的 flush() 方法
- 当应用程序调用 Transaction 的 commit()方法的时, 该方法先 flush ,然后在向数据库提交事务
- 当应用程序执行一些查询(HQL, Criteria)操作时,如果缓存中持久化对象的属性已经发生了变化,会先 flush 缓存,以保证查询结果能够反映持久化对象的最新状态
- flush 缓存的例外情况: 如果对象使用 native 生成器生成 OID, 那么当调用 Session 的 save() 方法保存对象时, 会立即执行向数据库插入该实体的 insert 语句.
- commit() 和 flush() 方法的区别:flush 执行一系列 sql 语句,但不提交事务;commit 方法先调用flush()方法,然后提交事务. 意味着提交事务意味着对数据库操作永久保存下来。
3.3.2 refresh方法
refresh : 强制发送SELECT语句,以使Session缓存中的数据与数据库中的数据一致 MySQL数据库可能会出现使用refresh方法,但是对象的状态不是最新(MySQL数据库默认事务隔离级别为可重复读:REPEATABLE READ,详见3.6),需要手动指定MySQL的事务隔离级别。
3.3.3 clear方法
clear :清空session缓存
当前内容版权归 chocolate213 或其关联方所有,如需对内容或内容相关联开源项目进行关注与资助,请访问 chocolate213 .