你的浏览器不支持canvas

做你害怕做的事情,然后你会发现,不过如此。

Hibernate不使用缓存,查询数据库数据

时间: 作者: 黄运鑫

本文章属原创文章,未经作者许可,禁止转载,复制,下载,以及用作商业用途。原作者保留所有解释权。


  • Hibernate中查询实体后set了某个值,如果再使用find查询这个实体,会发现查询出的实体已经是set过的值,原因是项目中Hibernate开启了缓存,查询时优先从当前会话的缓存查询;如果不同会话则不影响。
  • 测试代码:
    @Service
    public class SpiderInfoService {
      @PersistenceContext
      private EntityManager em;
    
      public void test() {
          SpiderInfo entity = em.find(SpiderInfo.class, 1L);
          entity.setTitle("123");
          SpiderInfo oldEntity = em.find(SpiderInfo.class, 1L);
          //会发现 oldEntity.getTitle(); 的值已经是123
      }
    }
    
  • 可以使用refresh方法:从数据库中刷新实体的状态,覆盖对实体所做的更改
  • 需要注意的是,如果之前对实体做过更改,那么刷新后会覆盖之前实体所做的更改

  • 代码如下:
    @Service
    public class SpiderInfoService {
      @PersistenceContext
      private EntityManager em;
    
      public void test() {
          SpiderInfo entity = em.find(SpiderInfo.class, 1L);
          entity.setTitle("123");
          SpiderInfo oldEntity = em.find(SpiderInfo.class, 1L);
          em.refresh(oldEntity);
          //会发现 entity.getTitle(); 和 oldEntity.getTitle(); 的值都变成了数据库中的值
      }
    }
    

对于本文内容有问题或建议的小伙伴,欢迎在文章底部留言交流讨论。