Hibernate 的clear()、flush()、evict(obj)使用

1、clear()

清除session缓存;

public void clearTest() {
        Session session =  getHibernateTemplate().getSessionFactory().getCurrentSession();
        session.beginTransaction();
        User u1 = (User) session.get(User.class, 3);
        //session.clear();
        User u2 = (User) session.get(User.class, 3);
        session.getTransaction().commit();
}

当不执行session.clear()时,执行1条sql;当执行session.clear()时执行2条sql。

2、flush()

强制执行从内存到数据库的同步;

public void flushTest(){
        Session session =  getHibernateTemplate().getSessionFactory().getCurrentSession();
	//session.setFlushMode(FlushMode.Always|AUTO|COMMIT|NEVER|MANUAL);
        session.beginTransaction();
        User u = (User) session.get(User.class, 3);
        u.setName("name1");
        //session.flush();
        u.setName("name2");
        session.getTransaction().commit();
}

当不执行session.flush()时,执行1条sql;当执行session.flush()时,执行2条sql。

flush()可以设置什么时候执行
Always: 任何代码都会 Flush
AUTO: 默认方式 – 自动
Commit: COMMIT 时
Never: 始终不
MANUAL: 手动方式

3、evict(obj)

清除制定的缓存对象;

public void clearTest() {
        Session session =  getHibernateTemplate().getSessionFactory().getCurrentSession();
        session.beginTransaction();
        User u1 = (User) session.get(User.class, 3);
        User u2 = (User) session.get(User.class, 4);
        //session.evict(u1);
        User u3 = (User) session.get(User.class, 3);
        User u4 = (User) session.get(User.class, 4);
        session.getTransaction().commit();
}

当不执行session.evict(u1)时,执行2条sql;当执行session.evict(u1)时,执行3条sql。

注:hibernate提交sql语句时不是按照程序所写的顺序提交,hibernate会将所有的sql存放到缓存中,等待事务commit()时集中提交,切是按照insert()、update()、delete()的顺序进行提交,所以在适当的时候使用flush()方法可以提前进行部分提交

 


 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值