session.clear()与session.flush的区别

session.clear()方法负责清空session缓存中的实体对象,不管缓存中数据是否与数据库记录一致;

session.flush()方法负责同步session缓存中的实体对象与数据库记录,保持数据的一致性。

@Test
public void testSessionClear(){
	Session session = sessionFactory.openSession();
	session.beginTransaction();
	Teacher t = (Teacher) session.get(Teacher.class, 3);
	System.out.println(t.getName());
	session.clear();//这里不clear只会执行一次sql语句,有clear会执行2次
	Teacher t2 = (Teacher) session.get(Teacher.class, 3);
	System.out.println(t2.getName());
	session.getTransaction().commit();
}

如果没有调用session.clear(),由于一级缓存的存在,查询同样的记录,只会发出一条sql语句;如果清空了session缓存,那么这里会发出2条sql语句。


@Test
public void testFlush()
{
	Session session =  sessionFactory.openSession();
	session.beginTransaction();
	Teacher t = (Teacher) session.get(Teacher.class, 3);
	t.setName("xiu");
	session.flush();//有flush会执行2次UPDAE,没有会只执行一次
	t.setName("aty");
	session.getTransaction().commit();
}
如果不执行flush,只会发出一条update语句;执行了flush,会发出2条update语句,也就是说flush会强制缓存与数据库数据同步

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值