hibernate查询数据库与缓存开启时机

关于hibernate在第一次查询数据库的时候,是否开启缓存,及开启缓存的时机,使用的缓存是以及还是二级,请详情说明下,万分感谢!!!

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以参考下这篇文章:Hibernate框架之项目启动常见问题以及解决方法
  • 除此之外, 这篇博客: hibernate5关联查询和条件查询以及统计查询中的 一级缓存的特性:缓存中的持久化对象会自动更新数据库 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:
      @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();
        }
    

    在这里插入图片描述


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^