Hibernate脏检查的剖析

介绍

持久性上下文使实体状态转换进入队列,该实体状态转换在刷新后转换为数据库语句。 对于托管实体,Hibernate可以代表我们自动检测传入的更改并安排SQL UPDATE。 这种机制称为自动脏检查

默认的脏检查策略

默认情况下,Hibernate检查所有托管实体属性。 每次加载实体时,Hibernate都会复制所有实体属性值。 在刷新时,每个受管实体属性都会与加载时快照值匹配:

defaultflusheventflow1

因此,每个脏检查的数量由以下公式给出:

latex.php

哪里

n =受管理实体的数量
p =给定实体的实体数

即使单个实体的仅一个属性发生了变化,Hibernate仍将检查所有托管实体。 对于大量的受管实体,默认的脏检查机制可能会占用大量CPU和内存。 由于初始实体快照是单独保存的,因此持久性上下文所需的内存是所有受管实体通常占用的内存的两倍。

字节码检测

一种更有效的方法是在值更改时标记脏属性。 与原始的深度比较策略类似,优良作法是将域模型结构与更改检测逻辑分离。 自动实体更改检测机制是一个跨领域的问题 ,可以在构建时或运行时进行编织。

实体类可以附加实现自动脏检查机制的字节码级指令。

编织方式

字节码增强可以发生在:

  • 构建时间编译休眠实体之后,构建工具(例如ANT , Maven )将在每个已编译实体类中插入字节码级别的指令。 由于类是在构建时增强的,因此此过程不会产生额外的运行时损失。 可以针对增强的类版本进行测试,以便在构建项目之前验证实际的生产代码。
  • 运行时可以使用以下方法完成运行时编织:
    • Java代理,在实体类加载时进行字节码增强

迈向默认字节码增强脏检查

Hibernate 3一直通过ANT目标提供字节码检测,但是它从未成为主流,大多数Hibernate项目目前仍在使用默认的深度比较方法。

虽然其他JPA提供程序(例如OpenJPA , DataNucleus )一直在支持字节码增强方法,但是Hibernate才刚刚开始朝这个方向发展,提供了更好的构建时选项,甚至提供了自定义的脏检查回调 。

在我的下一篇文章中,我将向您展示如何使用自己的特定于应用程序的策略自定义脏检查机制。

翻译自: https://www.javacodegeeks.com/2014/08/the-anatomy-of-hibernate-dirty-checking.html

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

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

相关文章

http GET 和 POST 请求的优缺点、区别以及误区

原文章:https://blog.csdn.net/qq_28483283/article/details/80207674 请优先参考原文章 Get和Post在面试中一般都会问到,一般的区别: (1)post更安全(不会作为url的一部分,不会被缓存、保存在服…

软件工程第二次作业-VSTS单元测试

一、选择开发工具 开发工具选择 Visual studio 2017 社区版,开发语言为C 由于之前已经安装完毕,所以不上传安装过程,主界面如下: 二、练习自动单元测试 使用的测试工具是VSTS,具体步骤如下: 1.编写一个判断…

随便写写(8)

凌晨两点了,还在捣鼓虚拟机,教师节老师们吃不上饭,罪过可就大了。远程有点慢,还遇到个小问题,.netfx 3.5几次都没装上,看了下日志,好像是ghost里的.netfx 2.0有问题,想卸载之&#x…

React后台管理系统-登录页面

登录页面 <div className"col-md-4 col-md-offset-4"> <div className"panel panel-default login-panel"> <div className"panel-heading">欢迎登录 - MMALL管理系统</div> <div className"panel-body"&g…

识别JVM –比预期的要复杂

在Plumbr&#xff0c;我们花了最后一个月的时间来为将来的重大改进奠定基础。 此类构件之一是为JVM添加唯一标识符&#xff0c;以便将来自同一JVM的所有会话链接在一起。 虽然一开始看起来似乎很琐碎的任务&#xff0c;但是当查看JVM捆绑的jps命令的输出时&#xff0c;围绕该问…

随记3

查看本机ip&#xff1a;ifconfig | grep "inet " | grep -v 127.0.0.1去两端空格&#xff1a;rowrow.strip(\t)替换\n \r \t 为空&#xff1a;row row.replace(\r,).replace(\n,).replace(\t,’)字符串长度&#xff1a;aa ‘afebb’ print(len(aa))列表 List列表…

求一架构 : 保留历史数据

最近做一个学校管理系统&#xff0c;当中遇到一个比较麻烦的问题“保留历史数据”&#xff0c;很疑惑&#xff0c;说出来大家讨论下&#xff0c;相信很多人也遇到同样的问题。校方提出需求如下&#xff1a;1.要保留学期留历史数据比如&#xff1a;●  一年级一班2008-2009上学…

React后台管理系统-品类的增加、修改和查看

1.页面 2.品类列表展示 let listBody this.state.list.map((category, index) > { return ( <tr key{index}> <td>{category.id}</td> <td>{category.name}</td> <td> <a className"opear" onClick{(e) > this.onUpda…

hdu5111 树链剖分,主席树

hdu5111 链接 hdu 思路 先考虑序列上如何解决。 1 3 2 5 4 1 2 4 5 3 这个序列变成 1 2 3 4 5 1 3 5 5 2 是对答案没有影响的(显然)。 然后查询操作\(l,r,L,R\)就是&#xff0c; 一段连续的区间\([L,R]\)内包含几个值在\([l,r]\)的数字个数. 主席树就可以做了。\(query(rt[L-1]…

使用log4j监视和筛选应用程序日志到邮件

在今天的帖子中&#xff0c;我将向您展示如何将日志语句过滤为警告电子邮件。 这是出于监视我正在处理的一个应用程序的一些关键点的需要。 您可以使用一些工具来执行应用程序监视。 我不会详细介绍这些工具&#xff0c;但有时让应用程序发送警告电子邮件会更容易。 我主要将l…

FF

ietab :IE 内核tab mix plus &#xff1a;管理TABfirebug live http headersminimizeToTray安装插件方法&#xff1a;file-open file - select "*.xpi"https://addons.mozilla.org/en-US/firefox/https://addons.mozilla.org/en-US/firefox/addon/1419http://l…

Vue node.js商城-购物车模块

一、渲染购物车列表页面 新建src/views/Cart.vue获取cartList购物车列表数据就可以在页面中渲染出该用户的购物车列表数据 data(){ return { cartList:[] // 购物车商品列表 } }, mounted:function(){ this.init(); }, methods:{ init(){ // 初始化商品数据 axios.get(/users/…

RxJava + Java8 + Java EE 7 + Arquillian =幸福

微服务是一种体系结构样式&#xff0c;其中每个服务都实现为一个独立的系统。 他们可以使用自己的持久性系统&#xff08;尽管不是强制性的&#xff09;&#xff0c;部署&#xff0c;语言等。 由于系统由一个以上的服务组成&#xff0c;因此每个服务将与其他服务通信&#xff…

C# -- RSA加密与解密

1. RSA加密与解密 -- 使用公钥加密、私钥解密 public class RSATool{public string Encrypt(string strText, string strPublicKey){RSACryptoServiceProvider rsa new RSACryptoServiceProvider();rsa.FromXmlString(strPublicKey);byte[] byteText Encoding.UTF8.GetByt…

React后台管理系统-file-uploader组件

1.React文件上传组件github地址: https://github.com/SoAanyip/React-FileUpload 2.Util里边新建file-uploader文件夹&#xff0c;里边新建index.jsx import React from react; import FileUpload from ./react-fileupload.jsx; class FileUploader extends React.Component{…

经典代码收藏

1. οncοntextmenu"window.event.returnvaluefalse" 将彻底屏蔽鼠标右键 <table border οncοntextmenureturn(false)><td>no</table> 可用于Table 2. <body onselectstart"return false"> 取…

js 实现文件导出、文件下载

1、通过创建a标签&#xff0c;实现下载功能 function downLoad(content,fileName){var aEle document.createElement("a");// 创建a标签// blob new Blob([content]); aEle.download fileName;// 设置下载文件的文件名//aEle.href URL.createObjectUrl(blob);aEl…

VMware Station NAT上网模式配置

转载于:https://www.cnblogs.com/MimiSnowing/p/10718235.html

JavaFX技巧10:自定义复合控件

用JavaFX编写自定义控件是一个简单直接的过程。 需要一个控件类来控制控件的状态&#xff08;因此命名&#xff09;。 外观需要控件的外观。 而且通常不是用于自定义外观CSS文件。 控件的常用方法是将其使用的节点隐藏在其外观类中。 例如&#xff0c; TextField控件使用javaf…

dell服务器安装系统注意之二.(2003/xp 的sn)

刚找回笔记,以前写的东西记了下来,是关于dell服务器上安装系统的.列表如下1、开机看画面提示&#xff0c;提示有“ctrm”--->当然入到去就要看提示“clean”磁盘的资料啦。&#xff08;除非你不清除&#xff09;---》根据提示进入-》easy setup----》提示f10保存---》ok了。…