关于hibernate在第一次查询数据库的时候,是否开启缓存,及开启缓存的时机,使用的缓存是以及还是二级,请详情说明下,万分感谢!!!
不知道你这个问题是否已经解决, 如果还没有解决的话: @Test
public void AutoUpdate(){
/**
* 第一次查出来,会将其同时放入两个地方,一级缓存和快照区(一级缓存的副本)
*/
UserEntity userEntity1=session.get(UserEntity.class,1);
System.out.println(userEntity1);
/**
* 更新持久化对象的值,同时也会更新一级缓存里面的值,但不会更新快照区里的值
*/
userEntity1.setUsername("我是更名后的火星人");
/**
* 事务:操作中的基本单元,都成功,都失败(的操作)----原子性,一致性,隔离性,持久性
* 无隔离性的问题:脏读,虚读,不可重复读
*
* 设置事务隔离级别
* mysql默认级别是repeatable read可重复读---在Repeatable Read隔离级别下,一个事务可能会遇到幻读(Phantom Read)的问题,幻读就是读出了不存在的数据
*
* 事务一提交,一级缓存就会发出updaate语句自动去更新数据库的值
* 查询操作不存在事务,所以查询不需要transaction.commit();
* update,insert,delete需要事务的支持,所以执行更新,插入,删除操作后需要提交事务,上述操作才会生效
* 事务提交,会进行一级缓存和快照区的值对比,如果相同,则不会发update语句,不同才会发update自动更新数据库的值
*/
transaction.commit();
System.out.println(userEntity1);
session.close();
}