如何配置 Hibernate 以立即应用所有保存、更新和删除?

2024-04-05

我该如何配置休眠 http://www.hibernate.org/在会话执行每个操作后立即将所有保存、更新和删除应用到数据库服务器?默认情况下,Hibernate 将所有保存、更新和删除操作排入队列,并仅在经过一段时间后才将它们提交到数据库服务器。flush()操作、提交事务或关闭发生这些操作的会话。

立即刷新数据库“写”操作的好处之一是程序可以捕获并处理任何数据库异常(例如约束违反异常 http://docs.jboss.org/hibernate/core/3.3/api/index.html?org/hibernate/exception/ConstraintViolationException.html) 在它们出现的代码块中。对于延迟或自动刷新,这些异常可能会在导致 SQL 操作的相应 Hibernate 操作很久之后发生。

Update:

根据Hibernate API文档获取接口Session http://docs.jboss.org/hibernate/stable/core/api/org/hibernate/Session.html,在会话结束之前捕获并处理数据库异常的好处可能根本没有任何好处:“如果会话抛出异常,则必须回滚事务并丢弃会话。会话的内部状态可能不异常发生后与数据库一致。”

那么,也许用 try-catch 块围绕“立即”Hibernate 会话写入操作的好处是在异常发生时立即捕获并记录异常。立即冲洗这些操作还有其他好处吗?


如何配置 Hibernate 在会话执行每个操作后立即将所有保存、更新和删除应用到数据库服务器?

据我所知,Hibernate 没有为此提供任何设施。然而,看起来 Spring 确实如此,而你可以进行一些数据访问操作FLUSH_EAGER http://static.springsource.org/spring/docs/2.5.x/api/org/springframework/orm/hibernate3/HibernateAccessor.html#FLUSH_EAGER通过转动他们的HibernateTemplate http://static.springsource.org/spring/docs/2.5.x/api/org/springframework/orm/hibernate3/HibernateTemplate.html分别HibernateInterceptor http://static.springsource.org/spring/docs/2.5.x/api/org/springframework/orm/hibernate3/HibernateInterceptor.html到冲洗模式 (source https://forum.hibernate.org/viewtopic.php?p=2183346#p2183346).

但我强烈建议阅读javadoc小心(我会回来讨论这一点)。

默认情况下,Hibernate 将所有保存、更新和删除操作排入队列,并仅在执行了flush() 操作、提交事务或关闭发生这些操作的会话后才将它们提交到数据库服务器。

关闭会话不会刷新。

立即刷新数据库“写入”操作的好处之一是,程序可以捕获并处理发生异常的代码块中的任何数据库异常(例如 ConstraintViolationException)。使用延迟或自动刷新,这些异常可能会在导致 SQL 操作的相应 Hibernate 操作很久之后发生

首先,DBMS 在插入(或更新)或后续提交(这称为立即或延迟的约束)。因此,没有任何保证,您的 DBA 甚至可能不希望立即受到约束(但这应该是默认行为)。

其次,我个人认为立即冲洗的缺点多于好处,正如 javadoc 中白纸黑字所解释的那样FLUSH_EAGER http://static.springsource.org/spring/docs/2.5.x/api/org/springframework/orm/hibernate3/HibernateAccessor.html#FLUSH_EAGER:

急切的冲水会导致立即 与数据库同步, 即使在交易中。这导致 不一致的情况出现并抛出 立即出现相应的异常,并且 参与的 JDBC 访问代码 同一笔交易将会看到 数据库已经发生变化 那时就意识到他们了。但缺点 是:

  • 与数据库的额外通信往返,而不是单个通信 事务提交时批处理;
  • 事实上,如果 Hibernate 发生故障,则需要实际的数据库回滚 事务回滚(由于已经 提交的 SQL 语句)。

相信我,增加数据库往返次数和丢失语句批处理可能会导致主要性能下降.

另请记住,一旦出现异常,除了放弃会话之外,您无能为力。

总而言之,我很高兴 Hibernate 将各种操作排队,我当然不会使用它EAGER_FLUSH flushMode作为一般设置(但可能仅适用于实际需要急切的特定操作,如果有的话)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何配置 Hibernate 以立即应用所有保存、更新和删除? 的相关文章

  • ElasticBeanstalk Java,Spring 活动配置文件

    我正在尝试通过 AWS ElasticBeanstalk 启动 spring boot jar 一切正常 配置文件为 默认 有谁知道如何为 java ElasticBeanstalk 应用程序 不是 tomcat 设置活动配置文件 spri
  • 线程自动利用多个CPU核心?

    假设我的应用程序运行 2 个线程 例如渲染线程和游戏更新线程 如果它在具有多核 CPU 当今典型 的移动设备上运行 我是否可以期望线程在可能的情况下自动分配给不同的核心 我知道底层操作系统内核 Android linux内核 决定调度 我的
  • manifest.mf 文件的附加内容的约定?

    Java JAR 中的 MANIFEST MF 文件是否有任何超出 MANIFEST MF 约定的约定 JAR规范 http download oracle com javase 1 4 2 docs guide jar jar html
  • CXF Swagger2功能添加安全定义

    我想使用 org apache cxf jaxrs swagger Swagger2Feature 将安全定义添加到我的其余服务中 但是我看不到任何相关方法或任何有关如何执行此操作的资源 下面是我想使用 swagger2feature 生成
  • 如何为 Gson 编写自定义 JSON 反序列化器?

    我有一个 Java 类 用户 public class User int id String name Timestamp updateDate 我收到一个包含来自 Web 服务的用户对象的 JSON 列表 id 1 name Jonas
  • 使用替换字符串中多个单词的最有效方法[重复]

    这个问题在这里已经有答案了 此刻我正在做 Example line replaceAll replaceAll cat dog replaceAll football rugby 我觉得那很丑 不确定有更好的方法吗 也许循环遍历哈希图 ED
  • OnClick 事件中的 finish() 如何工作?

    我有一个Activity一键退出Activity 通过layout xml我必须设置OnClick事件至cmd exit调用 this finish 效果很好 public void cmd exit View editLayout thi
  • 无法理解 Java 地图条目集

    我正在看一个 java 刽子手游戏 https github com leleah EvilHangman blob master EvilHangman java https github com leleah EvilHangman b
  • Java中接口作为方法参数

    前几天去面试 被问到了这样的问题 问 反转链表 给出以下代码 public class ReverseList interface NodeList int getItem NodeList nextNode void reverse No
  • 归并排序中的递归:两次递归调用

    private void mergesort int low int high line 1 if low lt high line 2 int middle low high 2 line 3 mergesort low middle l
  • 检查 protobuf 消息 - 如何按名称获取字段值?

    我似乎无法找到一种方法来验证 protobuf 消息中字段的值 而无需显式调用其 getter 我看到周围的例子使用Descriptors FieldDescriptor实例到达消息映射内部 但它们要么基于迭代器 要么由字段号驱动 一旦我有
  • 使用 AWS Java SDK 为现有 S3 对象设置 Expires 标头

    我正在更新 Amazon S3 存储桶中的现有对象以设置一些元数据 我想设置 HTTPExpires每个对象的标头以更好地处理 HTTP 1 0 客户端 我们正在使用AWS Java SDK http aws amazon com sdkf
  • 使用 SAX 进行 XML 解析 |如何处理特殊字符?

    我们有一个 JAVA 应用程序 可以从 SAP 系统中提取数据 解析数据并呈现给用户 使用 SAP JCo 连接器提取数据 最近我们抛出了一个异常 org xml sax SAXParseException 字符引用 是无效的 XML 字符
  • 当单元格内的 JComboBox 中有 ItemEvent 时,如何获取 CellRow

    我有一个 JTable 其中有一列包含 JComboBox 我有一个附加到 JComboBox 的 ItemListener 它会根据任何更改进行操作 但是 ItemListener 没有获取更改的 ComboBox 所在行的方法 当组合框
  • 运行 Jar 文件时出现问题

    我已将 java 项目编译成 Jar 文件 但运行它时遇到问题 当我跑步时 java jar myJar jar 我收到以下错误 Could not find the main class myClass 类文件不在 jar 的根目录中 因
  • 将 JTextArea 内容写入文件

    我在 Java Swing 中有一个 JTextArea 和一个 提交 按钮 需要将textarea的内容写入一个带有换行符的文件中 我得到的输出是这样的 它被写为文件中的一个字符串 try BufferedWriter fileOut n
  • 将2-3-4树转换为红黑树

    我正在尝试将 2 3 4 树转换为 java 中的红黑树 但我无法弄清楚它 我将这两个基本类编写如下 以使问题简单明了 但不知道从这里到哪里去 public class TwoThreeFour
  • java8 Collectors.toMap() 限制?

    我正在尝试使用java8Collectors toMap on a Stream of ZipEntry 这可能不是最好的想法 因为在处理过程中可能会发生异常 但我想这应该是可能的 我现在收到一个我不明白的编译错误 我猜是类型推理引擎 这是
  • javax.persistence.Table.indexes()[Ljavax/persistence/Index 中的 NoSuchMethodError

    我有一个 Play Framework 应用程序 并且我was使用 Hibernate 4 2 5 Final 通过 Maven 依赖项管理器检索 我决定升级到 Hibernate 4 3 0 Final 成功重新编译我的应用程序并运行它
  • Swagger/Openapi-Annotations:如何使用 $ref 生成 allOf?

    我正在生成 Rest 端点 包括添加OpenAPI Swagger对生成的代码进行注释 虽然它对于基本类型运行得很好 但我在自定义类方面遇到了一些问题 现在我有很多自定义类的重复架构条目 使用 Schema 实现 MyClass class

随机推荐

  • JavaScript 中的匹配算法

    我正在寻找 JavaScript 的 Blossom 算法的实现或类似的东西 我有一套对 A B A C B D 我需要挑选对 假设每个字母只能在输出中出现一次 在上述情况下 正确的结果是 A C B D 因为 A B C 和 D 都最终出
  • 核心图像 - 在 CMSampleBufferRef 上渲染透明图像会导致其周围出现黑框

    我正在尝试在使用 AVFoundation 的 AVCaptureVideoDataOutput 录制的视频上添加水印 徽标 我的类设置为sampleBufferDelegate 并接收CMSamplebufferRefs 我已经将一些效果
  • 缺少 Perl 依赖项实际上并未丢失

    我正在尝试在 Amazon Web Services 的 EC2 实例上安装 OTRS Help Desk 我正在按照安装说明进行操作here http otrs github io doc manual admin stable en h
  • 谁负责下一个视图?

    在典型的 MVC 架构中 决定接下来显示哪个视图的逻辑在哪里 假设是某种具有多个视图 窗口 的应用程序 这些视图在不同时间可能可见或不可见 具体取决于用户操作 例如 有时应用程序可能需要用户填写包含其他详细信息的表单 有时则可能不需要 控制
  • 将 Types.NVARCHAR 与 Oracle JDBC 驱动程序结合使用来处理西里尔字符

    我正在尝试使用 JDK 1 6 中国家字符集类型数据的新方法 http download oracle com docs cd B28359 01 java 111 b31224 global htm BABJFAGA 得到一个标准的JDB
  • Flutter:获取视频第一帧

    Flutter项目中如何获取本地视频文件的第一帧 这是我的代码 ImagePicker pickVideo source ImageSource camera then File file if file null mounted I go
  • 如何使用 Visual Studio 代码在 ASP.NET Core 中添加 ASP.NET 身份

    这是我在 ASP NET Core 中的第一个项目 现在我需要在 Visual Studio 代码中为核心 MVC 应用程序实现 ASP NET 身份 我查了一下 但在 Microsoft 网站上找不到任何博客和文档来说明如何做到这一点 如
  • 如何安装imap客户端

    我正在尝试使用 IMAP 客户端库 https imapclient readthedocs org en stable https imapclient readthedocs org en stable 我下载了zip https py
  • `viewDidLayoutSubviews` 中的框架计算

    首先 我应该提到 这主要是一个效率问题 关于在哪里进行框架计算有很多讨论viewWillAppear太早了并且viewDidAppear太晚了 视图已经可见 常见的答案是进行帧计算viewDidLayoutSubviews 问题是 它被多次
  • Silverlight:如何禁用浏览器的刷新按钮?

    我正在开发一个 Silverlight 应用程序 即根本没有 HTML 内容 最大的抱怨之一是如果用户不小心按了 F5 应用程序就会重新启动 那么有什么办法可以禁用浏览器中的 刷新 按钮吗 或者至少处理F5 这里有几个选项 http for
  • Twitter 客户端中的自动链接@提及

    我正在构建一个基本的 Twitter 客户端应用程序 我正在尝试弄清楚如何使保存推文的 TextView 自动链接 提及 以便它们链接到任何人的 Twitter 页面 就像在 Twitter 网站上一样 我的猜测是 这将涉及制作一个自定义
  • 使用 Python evdev 模拟按住控制器 dpad 按钮

    我正在尝试使用 Python evdev 模拟按住控制器上的 DPad 按钮 到目前为止 我已经成功按下一个按钮 如下所示 import os import time from evdev import uinput ecodes as e
  • Active Records 按 ID 排序[重复]

    这个问题在这里已经有答案了 如果我有 id 为 1 2 3 4 的记录 并且想要以某种方式对它们进行排序 例如 1 4 2 3 我该怎么做 我想类似的东西 但它当然行不通 Service all order id 1 4 2 3 贾斯汀 韦
  • JVM 在 OutOfMemoryError 之后是否自行终止 [重复]

    这个问题在这里已经有答案了 发生 OutOfMemoryError 后 JVM 会自行终止吗 如果不是那么为什么 它会尝试收回资源吗 还是有其他原因 OutOfMemoryError 不会终止 JVM 如果它未被捕获 它将终止引发错误的线程
  • angularjs 获取表单操作并提交给它

    我有一个表单 我想捕获它的提交 检查数据的验证 然后将表单提交到 HTML 表单内的操作 div div
  • Jquery 验证自定义错误消息位置

    这看起来很简单 但我无法弄清楚 我正在使用 jquery 验证插件 我正在尝试验证
  • 从点列表中获取两个最近的点

    我得到了一个整数 浮点数列表 我需要找到最接近的两个数字 我将如何仅使用嵌套 for 循环来做到这一点 如果点是一维的 就像您的输入只是一个数字列表 例如 1 4 6 2 那么你可以通过对它们进行排序并找到差异最小的在 O n log n
  • Reactjs - redux 表单和材质 UI 框架 - 具有自动类型 - 和清除字段功能

    我正在构建一个使用 redux 表单和材料 ui 框架的嵌套表单框架 迄今为止我已经在这里构建了组件 https codesandbox io s heuristic hopper lzekw https codesandbox io s
  • 在 GWT 中使数据网格的行可拖动

    我想制作一个数据网格 其中的行可以拖动 以便人们可以通过拖动行来上下移动行 由于数据网格的行将作为元素获取 我知道如何使小部件可拖动 但是如何使数据网格的行可拖动 我不想使用任何额外的插件或库来实现此目的 我所知道的唯一支持单元格小部件拖放
  • 如何配置 Hibernate 以立即应用所有保存、更新和删除?

    我该如何配置休眠 http www hibernate org 在会话执行每个操作后立即将所有保存 更新和删除应用到数据库服务器 默认情况下 Hibernate 将所有保存 更新和删除操作排入队列 并仅在经过一段时间后才将它们提交到数据库服