hibernate的flush()、refresh()、clear()针对一级缓存的操作的区别
2023-09-14 09:00:06 时间
首先session是有一级缓存的,目的是为了减少查询数据库的时间,提高效率,一级缓存的生命周期和session是一样的,
session.flush()和session.clear()就针对session的一级缓存的处理。
简单的说,
1 session.flush()的作用就是将session的缓存中的数据与数据库同步。
2 session.clear()的作用就是清除session中的缓存数据(不管缓存与数据库的同步)。
3.session.refresh():会强制发送select语句,以使session缓存中对象的状态和数据表中对应的记录保持一致。该方法的有效性需要配置事务的隔离级别为read commited(读已提交)。
注意:
执行完session.flush()时,并不意味着数据就肯定持久化到数据库中的,因为事务控制着数据库,如果事务提交失败了,缓存中的数据还是照样会被回滚的。
举例:
@Test public void testFlush(){ Session session = HibernateUitl.getSessionFactory().getCurrentSession(); session.beginTransaction(); Teacher t = (Teacher) session.get(Teacher.class, 3); t.setName("yyy"); t.setName("yyyyy"); session.getTransaction().commit(); }
看这段代码,我们setName() 2次, 但程序只会更改数据库一次,在commit时。
@Test public void testFlush(){ Session session = HibernateUitl.getSessionFactory().getCurrentSession(); session.beginTransaction(); Teacher t = (Teacher) session.get(Teacher.class, 3); t.setName("yyy"); session.flush();//有flush会执行2次UPDAE,没有会只执行一次 t.setName("yyyyy"); session.getTransaction().commit(); }
我们在第2次setName()时 执行session.flush().
再看hibernate 执行的sql 语句 Hibernate: update Teacher set birthday=?, name=?, title=? where id=? Hibernate: update Teacher set birthday=?, name=?, title=? where id=?
执行了2次Update
所以看出来flush方法会强制与数据库同步。
相关文章
- hibernate二级缓存策略
- hibernate作用_json.parsearray(string,class)
- hibernate二级缓存注解-mybatis的二级缓存和hibernate的三级缓存
- hibernate笔记(二)详解编程语言
- Hibernate中的一级缓存和二级缓存详解编程语言
- org.hibernate.MappingException: No Dialect mapping for JDBC type: -4详解编程语言
- Hibernate之one-to-one主键关联映射详解编程语言
- hibernate- Hibernate中多对多的annotation的写法(中间表可以有多个字段)详解编程语言
- 使用Hibernate 拦截执行sql语句,并输出sql语句,获取sql语句详解编程语言
- SSH框架(Struts2+Spring+Hibernate)搭建整合详细步骤
- Hibernate count方法:返回某个属性的数目
- Hibernate contains方法:判断对象是否在缓存中存在
- Hibernate lock方法:以指定的锁定模式进行锁定
- Hibernate begin方法:开启事务
- Hibernate hibernate.default_catalog属性:指定默认的表目录
- Hibernate hibernate.default_schema属性:指定默认的表空间
- Hibernate hibernate.max_fetch_depth属性:设置抓取深度
- 建立Hibernate与MySQL的友好连接(hibernate连接mysql)
- 为什么要学习Hibernate?