Hibernate——flush()方法强制同步数据库

本文探讨了Hibernate中的flush()方法,揭示了其如何强制将缓存中的更新同步到数据库。在默认情况下,即使多次修改持久态对象,也只有在commit后才会将最后一次更改写入数据库。通过使用flush(),可以确保中间的修改也被立即保存,从而产生多条UPDATE语句。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

@Test
	public void testFlush() {
		
		Session session = sf.getCurrentSession();
		session.beginTransaction();
		Student s = (Student)session.load(Student.class, 2);
		s.setName("ss");
		s.setName("ssss");
		
		session.getTransaction().commit();
	}

在persistent状态更新两次字段,可以看到只发了一次update语句。因为在缓存中的更新只有commit之后才会同步到数据库。所以缓存中不管改几次,commit之后只会更新最后的一次改动。


@Test
	public void testFlush() {
		
		Session session = sf.getCurrentSession();
		session.beginTransaction();
		Student s = (Student)session.load(Student.class, 2);
		s.setName("ss");
		session.flush();
		s.setName("ssss");
		
		session.getTransaction().commit();
	}

flush()方法的作用就是强制把缓存中的内容同步到数据库,所以当我们在两次更新之间加入flush()方法后,s.setName("ss")也存入了数据库,所以后台出现了两次update语句。


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值