java - Hibernate Envers 和 Hibernate Auto Flush
问题描述
我有一个使用 Hibernate 的 Spring 应用程序。我已经在其中实现了 Envers,效果很好。但是,默认情况下,Hibernate 会在某些事务提交之前自动刷新。
例如,我有一个 MVC 端点,它将更新一条记录,但在保存它之前,必须进行各种其他查询以检索其他一些数据。每次运行另一个查询时,Hibernate 都会刷新,这会导致每次更改都有多个审计行。这会造成一些混乱,因为我的记录中已经有一个修改日期,每次更新都没有更改(因为在更改此属性之前它正在刷新)。
我有哪些选择可以更有效地管理这个问题,并且即使以这种方式使用 Hibernate 刷新也可以创建可靠的审计日志?用一些自定义逻辑来实现我自己的监听器以检查它是否真的应该提交审计更改的唯一答案是什么?
解决方案
完成后,您可以分离实体并合并。这些查询仅在它们触及受挂起的插入/更新/删除影响的表时才会执行。如果您使用本机查询,这是一个不同的主题。Hibernate 没有 SQL 解析器来确定您正在触摸哪些表,因此它是保守的并刷新所有未决的更改。
推荐阅读
- javascript - 如何在 Fullcalendar.io 的新 v5 中过滤事件
- excel - 根据特定条件将特定单元格值从一个工作表复制粘贴到另一个工作表
- javascript - 仅在浏览器关闭而不是选项卡上清除 localStorage
- node.js - MongoDb 模式优化与分层数组
- javascript - Vue 不更新全局 $ 原型变量
- c++ - C++20 - 在模板中调用声明为 auto 的函数
- c++ - 仅处理平铺事件而不是最大化事件
- javascript - 撰写时Redux Reselect不更新?
- java - JWTParser - NoSuchMethodError - ObjectMapper.readerFor
- java - 如何将数据存储在对象的对象列表中?