hibernate jpa_JPA /Hibernate刷新策略初学者指南

hibernate jpa

介绍

在我以前的文章中,我介绍了实体状态转换 对象关系映射范例。

当刷新当前持久性上下文时,所有管理实体状态转换都将转换为关联的数据库语句。 Hibernate的刷新行为并不总是像人们想象的那样明显。

后写

Hibernate尝试将持久性上下文刷新推迟到最后可能的时刻。 传统上将此策略称为事务后写

后写与Hibernate刷新更相关,而不是任何逻辑或物理事务。 在事务期间,刷新可能会发生多次。

仅对当前数据库事务可见刷新的更改。 在提交当前事务之前, 其他并发事务看不到任何更改。

持久性上下文(也称为第一级缓存 )充当当前实体状态转换和数据库之间的缓冲区。

在缓存理论中 ,后同步要求对缓存进行所有更改,缓存的责任是最终与后备存储同步。

减少锁争用

每个DML语句都在数据库事务中运行。 基于当前数据库事务隔离级别 ,可以为当前选定/修改的表行获取锁(共享或显式)。

减少锁保持时间可以降低死锁的可能性,并且根据可伸缩性理论 ,它可以提高吞吐量。 锁总是引入串行执行,根据阿姆达尔定律 ,最大加速与当前执行程序的串行部分成反比。

即使在READ_COMMITTED隔离级别,UPDATE和DELETE语句也将获得锁。 此行为可防止其他并发事务读取未提交的更改或修改相关行。

因此,推迟锁定语句(UPDATE / DELETE)可能会提高性能,但是我们必须确保数据一致性不会受到任何影响。

批处理

延迟实体状态转换同步还有另一个主要优点。 由于所有更改都被立即清除,因此Hibernate可能会受益于JDBC批处理优化 。

批处理通过将多个DML语句分组为一个操作来提高性能,从而减少数据库往返。

读自己写的一致性

由于查询始终针对数据库运行(除非命中了二级查询缓存),因此我们需要确保在查询开始运行之前,所有未决的更改都已同步。

因此,JPA和Hibernate都定义了“ 查询前刷新”同步策略。

从JPA到Hibernate冲洗策略

JPA FlushModeType Hibernate刷新模式 Hibernate实现细节
汽车 汽车 有时会在查询执行之前刷新会话。
承诺 承诺 在提交事务之前刷新会话。
总是 在执行查询之前, 始终刷新会话。
手册 会话只能 手动刷新 。

决不
不推荐使用。 请改用MANUAL。 这是手动刷新的原始名称,但它误导用户以为Session永远不会被刷新。

当前冲洗范围

持久性上下文定义了默认的刷新模式,可以在创建Hibernate Session时覆盖它。 查询还可以采用刷新策略,因此会否决当前的持久性上下文刷新模式。

范围 冬眠 JPA
持久性上下文 届会 实体管理器
询问 询问
标准
询问
类型查询

敬请关注

在我的下一篇文章中,您将发现Hibernate FlushMode.AUTO破坏了SQL查询的数据一致性,并且您将看到如何克服这一缺点。

翻译自: https://www.javacodegeeks.com/2014/08/a-beginners-guide-to-jpahibernate-flush-strategies.html

hibernate jpa

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

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

相关文章

aop+注解 实现对实体类的字段校验_SpringBoot实现通用的接口参数校验

来自:掘金,作者:cipher链接:https://juejin.im/post/5af3c25b5188253064651c76原文链接:http://www.ciphermagic.cn/spring-boot-aop-param-check.html本文介绍基于Spring Boot和JDK8编写一个AOP,结合自定义…

java基础分享_一、java基础教程

1、java是一门比较纯粹的面向对象编程语言,所以java的所有代码都必须写在类的内部。1.1 java的可执行文件后缀名是".java",例如HelloWorld.java,并且每个可执行文件内部,必须有且仅有一个public公共类/公共接口/公共抽象…

Spring Boot自定义横幅生成

每当我们启动Spring Boot应用程序时,都会显示如下所示的文本消息。 这称为横幅。 现在,如果我们可以创建一个特定于我们的Spring Boot应用程序的自定义横幅并使用它代替默认的Spring Boot横幅,那将不是一件很棒的事。 有很多方法可以生成和使…

java简单递归算法_java递归算法的简单示例

java递归算法的简单示例今天参加笔试,要求用递归实现1357……没写出来,蛋疼。。。。下面复习一下,自己尝试着写还是没有写出来。。。。。没有写出来的关键是自己不知道该如何实现求和、实现出口递归实现的关键是:1.出口的设计2.递…

java等待_Java学习:等待唤醒机制

等待唤醒机制线程的状态NEW 至今尚未启动的线程处于这种状态RUNNABLE 正在Java虚拟机中执行的线程处于这种状态BLOCKED 受阻塞并等待某个监视器锁的线程处于这种状态WAITING 无限期的等待另一个线程来执行某一待定操作的线程处于这种状态TIMED_WAITNG 等待另一个线程来执行取…

游戏ai 行为树_游戏AI –行为树简介

游戏ai 行为树游戏AI是一个非常广泛的主题,尽管有很多资料,但我找不到能以较慢且更易理解的速度缓慢介绍这些概念的东西。 本文将尝试解释如何基于行为树的概念来设计一个非常简单但可扩展的AI系统。 什么是AI? 人工智能是参与游戏的实体表现…

java适配器模式应用_java笔记--适配器模式的运用

适配器模式的运用主要应用:可以在符合OCP原则(开笔原则)的基础上,为类增加新的功能。在现有功能上添加新的功能时无须修改原有功能代码。主要角色:目标角色:就是期待得到的接口,如给汽车添加GPS的接口;源角色&#xff…

java构造器_Java构造器就是这么简单!

前言理解构造器之前,首先我们需要了解Java中为什么要引入构造器,以及构造器的作用。在很久之前,程序员们编写C程序总会忘记初始化变量(这真的是一件琐碎但必须的事),C引入了 构造器(constructor) 的概念&am…

JavaFX技巧32:需要图标吗? 使用Ikonli!

动机 自2013年以来,我一直在编写JavaFX应用程序和库的代码,它们的共同点是,我需要找到可以用于它们的良好图标/图形。 作为前Swing开发人员,我首先使用图像文件,GIF或PNG。 通常,我会从IconExperience&…

mysql索引是什么 优点和缺点_mysql索引的类型和优缺点

现在来介绍了数据库索引,及其优、缺点。针对MySQL索引的特点、应用进行了详细的描 述。分析了如何避免MySQL无法使用,如何使用EXPLAIN分析查询语句,如何优化MySQL索引的应用。本文摘自《MySQL 5权威指南》(3rd)的8.9节。索引是一种特殊的文件…

pycharm和python在mac里安装_MAC安装python-opencv及在pycharm下的配置

基础:Mac os 10.13.4;pycharm2018.1;Python3.6.5小白一个,某日突发奇想,想利用opencv实现面部识别,但在网上查了一圈,在配置时都太麻烦,什么下载源码,用Xcode或者CMake编…

内置对象和内置函数_内置假对象

内置对象和内置函数尽管模拟对象是进行单元测试的理想工具,但通过模拟框架进行模拟可能会将您的单元测试变成难以维护的混乱。 这种复杂性的根本原因是我们的对象太大。 他们有很多方法,这些方法返回其他对象,这些对象也有方法。 当将此类对…

java应用部署docker_Docker部署JavaWeb项目实战

摘要:本文主要讲了怎样在Ubuntu14.04 64位系统下来创建一个执行Java web应用程序的Docker容器。一、下载镜像、启动容器1、下载镜像先查看镜像docker images记住这个Image ID,下面我们启动容器须要用到它。假设看到以上输出,说明您能够使用“…

python解析http数据包_如何在python中嗅探HTTP数据包?

I want to sniff all the HTTP packets in my computer via python(version2.6.. is this possible? can I do it with scapy, or without other external modules?解决方案Scrapy is only for extracting data from webpages or similar structured documents.To actually r…

如何用Java创建不可变的Map

你好朋友, 在本教程中,我们将看到如何用Java创建不可变的Map。 –不可变的类或对象是什么意思? –什么是不可变地图? –如何在Java中创建不可变的Map? 不变的类或对象是什么意思? 不可变的类或对象是创…

quartz java 线程 不释放_java Quartz 内存泄漏

我用定时器启动应用的时候发现内存泄漏,具体报错如下:十月 30, 2015 2:30:12 下午 org.apache.catalina.startup.HostConfig undeploy信息: Undeploying context [/ChinaMoney Maven Webapp]十月 30, 2015 2:30:15 下午 org.apache.catalina.loader.Weba…

在ultraedit查找每行第二个单词_新手收藏!亚马逊关键字查找

亚马逊销售中最重要的是“排名”。而“关键字”对提高排名很重要。搜索结果对亚马逊的销售产生重大影响。要想让你的产品被显示在搜索结果的顶部,那你必须选择有效的关键字。搜索关键词排名一直上不去,你可能会这么想:“关键字不好吧......。…

java opencv磨皮算法_使用OPENCV简单实现具有肤质保留功能的磨皮增白算法

在一个美颜高手那里发现一个美颜算法,他写出了数学表达式,没有给出代码,正好在研究OPENCV,顺手实现之。具体过程就是一系列矩阵运算,据说是从一个PS高手那里研究 出来的,一并表示感谢。这是数学表达式&…

junit单元测试断言_简而言之,JUnit:单元测试断言

junit单元测试断言简而言之,本章涵盖了各种单元测试声明技术。 它详细说明了内置机制, Hamcrest匹配器和AssertJ断言的优缺点 。 正在进行的示例扩大了主题,并说明了如何创建和使用自定义匹配器/断言。 单元测试断言 信任但要验证 罗纳德里…

keyshot环境素材文件_KeyShot渲染,打光这么打,效果倍儿棒

有过渲染经验的小伙伴们应该知道,除了需要对渲染软件的操作熟悉外,最重要的莫过于“材质”和“灯光”。而这里,就不得不提到KeyShot,作为工业设计行业必须要掌握的技能之一,它在行业当中的地位可谓独树一帜。除了其操作…