hibernate中的缓存模式

下面是总结的Hibernate中的缓存模式

1、FlushMode.NEVER模式
/**
* hibernate中的缓冲模式:FlushMode.NEVER
* 除非程序调用flush方法,否则永不清理缓存,即:不会将数据同步到数据库中
*/
public void flushModeNEVER() {
	Session session = HibernateSessionFactory.getSession();
	session.setFlushMode(FlushMode.NEVER); //设置hibernate中的缓冲模式:FlushMode.NEVER
	Transaction tran = session.beginTransaction();
	Student s = (Student) session.get(Student.class, "s001");
	s.setSage(new Long(33)); //将年龄修改为33
	session.save(s); //将修改过的学生对象保存到数据库中
	tran.commit();
	HibernateSessionFactory.closeSession();
}

上面代码中没有调用session.flush()方法,所以不管怎么使用save()方法都无法将缓存中的数据同步到数据库中

2、FlushMode.COMMIT
/**
* hibernate中的缓存模式:FlushMode.COMMIT
* 在事务结束之前清理session的缓存,其他任何时候都不清理缓存
*/
public void flushModeCOMMIT() {
	Session session = HibernateSessionFactory.getSession();
	session.setFlushMode(FlushMode.COMMIT); //设置hibernate中的缓冲模式:FlushMode.COMMIT
	Transaction tran = session.beginTransaction();
	Student s = (Student) session.get(Student.class, "s001");
	s.setSage(new Long(33)); //将年龄修改为33
	session.save(s); //将修改过的学生对象保存到数据库中
	tran.commit(); //事务提交结束会清理session缓存中的数据,并同步数据库
	HibernateSessionFactory.closeSession();
}

上面代码在事务提交的时候,会将缓存中的数据同步到数据库中

3、FlushMode.AUTO
/**
* hibernate中的缓存模式:FlushMode.AUTO
* 它是Hibernate中的默认的缓存模式。如果一个对象在缓存中被更改了,则在一个查询语句之前Hibernate会将缓存中的数据先同步到数据库,然后才进行数据的查询
*/
public void flushModeAUTO() {
	Session session = HibernateSessionFactory.getSession();
	Transaction tran = session.beginTransaction();
	Student s = (Student) session.get(Student.class, "s001");
	s.setSage(new Long(23)); //将年龄修改为23
	session.save(s);
	s = (Student) session.createQuery("from Student where sno = 's001'").uniqueResult();
	System.out.println("编号为" + s.getSno() + "的学生年龄为:" + s.getSage());
	tran.commit();
	HibernateSessionFactory.closeSession();
}

你可能感兴趣的:(Hibernate)