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

来源:互联网 发布:360免费送windows 10 编辑:程序博客网 时间:2024/04/30 07:08

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()方法可以提前进行部分提交

 


 

 

0 0