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();
          }
      

      在这里插入图片描述


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

报告相同问题?

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog