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