soapstone 2014-08-19 15:02 采纳率: 0%
浏览 667

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

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

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2022-10-25 19:36
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:
    • 你可以参考下这篇文章: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();
          }
      

      在这里插入图片描述


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

报告相同问题?

悬赏问题

  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算
  • ¥15 java如何提取出pdf里的文字?