jpa一级缓存和二级缓存

我敢打赌,每个Java开发人员至少都听说过L1(又名EntityManager或Session)缓存。 但是您的理解水平足够好吗? 如果不确定,请考虑阅读这篇文章。

首先,我们需要知道持久性上下文是什么。 根据EntityManager JavaDoc,我们知道:

“持久性上下文是一组实体实例,其中对于任何持久性实体标识,都有一个唯一的实体实例。 在持久性上下文中,管理实体实例及其生命周期。”

实际上,第一级缓存与持久性上下文相同。 这意味着诸如persist()merge()remove()之类的操作只会更改上下文中的内部集合,而不会同步到基础数据库。 最重要的是,当您调用clear()方法时会发生什么。 清除L1缓存。 但是我们知道L1 ==持久性上下文。 这是否意味着清除L1会删除所有实体? 实际上是的-所有实体都将被删除,并且永远不会同步到数据库。 这不是秘密,它在文档中指出–” 对实体(…)进行的未经修改的更改将不会同步到数据库。 ”但是谁在乎文档呢? :)

那么它在实践中看起来如何? 看下面的代码:

em.persist(myEntity); // saves entity to the context
em.flush(); // triggers insert into database
em.clear(); // removes entity from the context == entity is no longer managed

如果省略flush(),则实体将不会访问数据库。 它仅存在于您的代码中,并且在离开创建该对象的方法之后将丢失。 让我们看下一个示例:

myEntity.setName("old name");
em.persist(myEntity);
em.flush();
em.clear();
myEntity.setName("new name");
em.flush();

完成此代码后, name属性的值是什么? 当然仍然是“旧名称”,因为在调用setName()的那一刻,该实体不再受管理,并且必须与持久性上下文合并(通过调用em.merge(myEntity)方法)才能成为主题肮脏的检查 。

但是我没有在代码中调用flush()方法,所以一切正常! 但是,您是否调用clear() ? 我也这么想。 默认的刷新行为是什么? 默认情况下,JPA刷新提交以及每次查询执行时所做的更改( FlushModeType.AUTO) 。 如果将其更改为COMMIT(使用em.setFlushMode(FlushModeType.COMMIT)方法),则仅在提交时才会进行刷新(顾名思义)。

在处理批处理操作时,深入了解L1行为尤其重要。 为什么? 如果您希望这种操作有效,那么我们就必须不时手动刷新更改(假设每100次操作)。 您知道吗,flush()不会清除持久性上下文吗? 那又如何呢? 刷新并不便宜,因为它必须处理上下文中的所有实体,以查看是否有任何要与数据库同步的对象。 如果您不会在flush()之后立即手动清除上下文,则每个下一个操作将花费越来越长的时间。 坦白地说,这一次呈指数增长,这似乎足以记住有关提到的技术。

如果您有兴趣深入了解持久性上下文,请随时克隆并使用此存储库 ,其中包含所有描述的案例和示例。

翻译自: https://www.javacodegeeks.com/2017/04/understanding-first-level-jpa-cache.html

jpa一级缓存和二级缓存

jpa一级缓存和二级缓存_了解一级JPA缓存相关推荐

  1. 一级学科和二级学科_在多学科团队中工作的6个障碍(以及如何解决这些问题)

    一级学科和二级学科 In a team with different skillsets, one can be hopeful and idealistic about the outcome. T ...

  2. 同时存多个变量缓存 微信小程序_微信小程序 缓存(本地缓存、异步缓存、同步缓存)详解...

    微信小程序 缓存 关于本地缓存 1.wx.setStorage(wx.setStorageSync).wx.getStorage(wx.getStorageSync).wx.clearStorage( ...

  3. 考计算机二级要先学一级吗,计算机二级必须要过一级吗

    计算机二级可以直接报考,不需要考一级.计算机二级考试有九门科目.如果你选择其中一门科目,通过后就可以获得计算机二级证书. 有必要测试计算机一级吗 如果你想直接测试二级计算机,那么一级测试是不必要的.需 ...

  4. 缓存击穿和缓存穿透的区别_后端RoadMap011:缓存穿透、缓存击穿、缓存雪崩区别和解决方案...

    一.缓存处理流程 前台请求,后台先从缓存中取数据,取到直接返回结果,取不到时从数据库中取,数据库取到更新缓存,并返回结果,数据库也没取到,那直接返回空结果. 二.缓存穿透 描述: 缓存穿透是指缓存和数 ...

  5. php中一级标题和二级标题,什么是一级标题,一二三标题格式举例

    什么是一级标题什么是一流的标题,第一级标题是讨论的第一个内容,如序言:一级标题通常指序号为[I,]的标题,也是最大的标题它是4号黑体,单行无标点符号:二级标题是指序号为[(1)]的标题,一般与正文字号 ...

  6. 什么是所谓的一级学科,二级学科,国家一级学科等,是怎样分类的??

    我国高等学校本科教育专业设置按"学科门类"."学科大类(一级学科)"."专业"(二级学科)三个层次来设置. 按照国家1997年颁布<授 ...

  7. 考试如何用计算机,计算机一级考试软件怎么使用_计算机一级考试软件安装使用教程...

    计算机一级考试软件全称为国家一级基础计算考试计算系统和MS办公应用模拟实践系统.计算机一级考试软件是根据"国家计算机考试项目"开发的,适用于所有支持计算机考试的人员,模拟练习非常全 ...

  8. java中一级缓存二级缓存_[Java] hibernate 一级缓存和二级缓存

    缓存是介于应用程序和物理数据源之间,其作用是为了降低应用程序对物理数据源访问的频次,从而提高了应用的运行性能.缓存内的数据是对物理数据源中的数据的复制,应用程序在运行时从缓存读写数据,在特定的时刻或事 ...

  9. java mysql 二级缓存_深入理解MyBatis中的一级缓存与二级缓存

    http://blog.csdn.net/weixin_36380516/article/details/73194758 先说缓存,合理使用缓存是优化中最常见的,将从数据库中查询出来的数据放入缓存中 ...

最新文章

  1. mysql根据时间取前后几秒,几分钟,几小时,几天,几月,几年
  2. Michael Brostein 最新几何深度学习综述:超越 WL 和原始消息传递的 GNN
  3. 机器学习预测农民是否可以得到贷款
  4. cordova:Error: Cannot find module '../cordova/platform_metadata'
  5. 使用Toast进行用户提醒(转)
  6. Numpy的基本用法
  7. java swing 例子(一些)
  8. shiro的简单入门使用
  9. linux登录界面主题,Ubuntu 18.10(Cosmic Cuttlefish) 新登录界面亮相,主题为Yaru
  10. VC控制台输出时设置字体及背景颜色
  11. linux内核开发_Linux 内核的代码仓库管理与开发流程简介
  12. linux的驱动开发——字符设备驱动
  13. 校招笔试C语言,校招c ++笔试题汇总
  14. 关于IP地址定位、IP查询和IP地址库 你想了解的历史都在这里
  15. java axis_Java 使用Axis实现WebService实例
  16. android加载obj文件,android – 从SD卡Rajawali解析.obj模型
  17. 汽车电子——常见的英文缩写(更新中)
  18. ubuntu 22.04设置字体为Garuda(mac字体Lucida Grande的开源替代)
  19. 浮点数到整数的快速转换
  20. matlab6.0哪一年,MATLAB版本与年份间的对应关系

热门文章

  1. P3700-[CQOI2017]小Q的表格【分块,欧拉函数】
  2. P4593-[TJOI2018]教科书般的亵渎【拉格朗日差值】
  3. P1160-队列安排【链表】
  4. P1967,ssl2267-货车运输【树上倍增LCA,最小生成树变形kruskal】
  5. MATLAB灰色预测
  6. [XSY] 最长公共子串对(后缀自动机)
  7. NOIP提高组复赛 知识点整理
  8. Simple-Faster-RCNN源码学习笔记
  9. 11、oracle数据库下的事务和触发器
  10. 达到年薪 40W 必需掌握的技术。