jpa一级缓存和二级缓存_了解一级JPA缓存

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一级缓存和二级缓存

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/335197.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

造完家怎么拆东西_地弹簧玻璃门怎么拆?地弹簧玻璃门拆除注意事项有哪些?...

现如今,我们总可以看到玻璃门的身影,在我们的生活中,玻璃门可以说是随处可见。而对于安装玻璃门,大家了解多少呢?为了更好认识玻璃门,今天就带大家一起走进玻璃门的安装中,告诉大家怎么样拆卸和组装玻璃门…

dubbo provider异步_Dubbo学习(六) Dubbo面试问题

Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合)。从服务模型的角度来看,Dubbo采用的是一种非常简单的模型,要么是提供方提供服务&#xff0c…

测试网页兼容软件,WEB测试兼容性

软件兼容性测试在目前软件测试领域占有很只要的地位,无论B/S架构还是C/S架构的软件都需要进行兼容性测试,充分保证产品的平台无关性,使用户群充分的感受到软件的友好。139WDA属于WEB产品,以下就来总结下WEB测试之兼容性测试。WEB兼…

Oracle/MySQL数据库的表间关联查询_多表关联查询的SQL语句详解

文章目录内连接 inner join示例外连接 outer joinleft outer join 左外连接示例right outer join 右外连接示例full outer join 全外连接示例外连接总结内连接 inner join 内连接又称为等值连接,语法结构: 表1 inner join 表2 on 条件 -- inner可以省略…

tf 矩阵行和列交换_TF-搞不懂的TF矩阵加法

看谷歌的demo mnist,卷积后加偏执量的代码h_conv1 tf.nn.relu(conv2d(x_image, W_conv1) b_conv1)h_pool1 max_pool_2x2(h_conv1)其中的x_image的维数是[-1, 28, 28, 1],W_conv1的维数是[5, 5, 1, 32], b的维数是[32]conv2d对x_image和W_conv1进行卷积…

kafka数据到flume_大数据摄取:Flume,Kafka和NiFi

kafka数据到flume初赛 在构建大数据管道时,我们需要考虑如何吸收出现在通常是Hadoop生态系统大门口的数据量,多样性和速度。 在决定采用哪种工具来满足我们的要求时,诸如可伸缩性,可靠性,适应性,开发时间成…

python如何打开json文件_如何使用python打开json文件?

工程_请求数据.json公司名称:{ "appKey": "9c9fa7201e90d3d96718bc3f36ce4cfe1781f2e82f4e5792996623b3b474fee2c77699eb5354f2136063e1ff19c378f0f6dd984471a38ca5c393801bffb062d6", "appId": "NMDPTRIAL_AutomotiveTesting_N…

手机热点总是正在连接服务器,手机热点用不了?可以尝试这个方法。

原标题:手机热点用不了?可以尝试这个方法。下班路上,上司突然打来“夺命连环call”,早上的方案需要赶紧改一下。无奈,只能拿出笔记本在地铁上临时办公,关键时候连接手机热点,却发现还是没网络。…

一年月份大小月口诀_大月小月口诀 什么意思 有多少天

大家都知道每年都有分为12个月,月份又被分为大月小月和平月,每种月份的天数都不一样,有许多人记不住哪些是大月,哪些是小月。其实大月小月是有口诀的,接下去就让老黄历带大家详细了解一下大小月的口诀以及天数吧。问&a…

Sublime Text for Mac 最新版安装后,无法搜索到Install Package的解决办法

打开命令面板搜索不到Install Package,说明没有安装Package Control。 如何安装Package Control? 首先打开Package Control中文镜像,打开后如下图所示: 点击「Install Now」后,如下图所示: 我们看到有两…

参数化测试 junit_使用JUnit 5进行更清洁的参数化测试

参数化测试 junit参数化单元测试的总体思路是对不同的数据运行相同的测试方法。 在JUnit 4中创建参数化测试远非完美。 现有体系结构存在许多问题:将参数定义为类字段,并需要使用构造函数来创建它们,参数化和非参数化测试不能混合在一个测试类…

python人工智能方向第三方库_Python进阶-第三方库管理和虚拟环境

本文为《爬着学Python》系列第十三篇文章。Python能在这几年火起来,靠的不是网上一大片的爬虫和服务器后端知识的应用(本专题就是这样的,这么说真的好吗?不过我们总得认清事实是吧。),靠的是Python搭上了大数据和人工智能的风。而…

tomcat应用服务器有哪些,手写一个Tomcat应用服务器

mytomcat项目简介自己实现的简易的TomcatTomca实现说明Tomcat,这只3脚猫,大学的时候就认识了,直到现在工作中,也常会和它打交道。这是一只神奇的猫,我们可以通过实现它来深刻了;了解它的实现原理。考虑自己…

不需要软著的安卓应用市场_哪些安卓应用市场上架应用比较简单啊,不需要软著啊?公司开发的 APP 着急上架...

ENNRIaaa:我看华为、360 、应用宝都需要软著kerb15:酷安?yuluo01:推广到位,网站下载都可以一个很冷门的领域,佛教 Appavalon8:我姐夫,佛教文化爱好者,研究佛教相关资料几…

SublimeText如何让代码的关键字高亮显示

如何设置不同语法的关键字高亮显示 假设你编写java代码,希望代码关键字高亮显示,你可以在菜单栏中选择「查看」-「语法」-「java」,勾选java即可,如下图: 当然,你也可以在页面右下角点击打开语法类型列表…

stringbuffer_StringBuffer的存在的含义

stringbuffer当我处理旧代码并在StringBuffer实例上运行时,通常将它们替换为StringBuilder实例。 尽管可以从此更改中获得性能优势,但我经常在我所知不会对性能产生明显影响的地方进行更改。 我认为,除了可能带来性能收益外,还应出…

python find函数实现原理_非常干货:Python 探针实现原理

△点击上方“Python猫”关注 ,回复“1”领取电子书剧照 | 《棋魂》原文:https://segmentfault.com/a/1190000004889212大家好,我是猫哥。关于 Python 中探针的运用,我之前写过一篇《由浅入深:Python 中如何实现自动导入…

服务器系统js文件报错,js服务器文件

js服务器文件 内容精选换一换登录Windows操作系统的弹性云服务器时,需使用密码方式登录。因此,用户需先根据创建弹性云服务器时使用的密钥文件,获取该弹性云服务器初始安装时系统生成的管理员密码(Administrator帐户或Cloudbase-init设置的帐…

云盘存储 教学反思_wps轻松办公优秀教学设计范文

wps轻松办公优秀教学设计范文[教学目的与要求]1.学会登录“WPS轻办公”2.学会保存、打开“云文档”3.学会把文档以图片的方式分享到“微博”4.通过观察“WPS轻办公”,了解“WPS轻办公”,初步会用“我的圈子”功能。[教…

Adobe PhotoShop(PS) for Mac 快捷键/PS快捷键

文章目录综合类图层视图工具箱综合类 功能说明快捷键打开文件Command O创建文档Command N存储为Web格式Command Option Shift S自由变换Command T切换到最初状态Option Command Z重做Shift Command Z自定义快捷键Option Command Shift K首选项Command K色阶Comman…