使用 JPA 跟踪历史记录

2024-04-20

我想通过使用一个新表来存储日志,其中包含进行更改的用户、日期以及每次更新/插入中发生的任何更改,从而为我的模型实体之一实现历史记录跟踪/审核。

我使用 EclipseLink 作为我的 JPA 提供程序,但我不想使用它历史政策 http://wiki.eclipse.org/Configuring_a_Descriptor_%28ELUG%29#Configuring_a_History_Policy因为提供商将来可能会发生变化。我也无法使用休眠恩弗斯 http://www.jboss.org/envers为了同样的原因。

我调查了Spring Data 提供的审计支持 http://docs.spring.io/spring-data/data-jpa/docs/current/reference/html/jpa.repositories.html#jpa.auditing,但它似乎非常基本,它只允许您存储创建或修改实体和日期的用户,而不是更改。

我也知道JPA的prePersist and preUpdate,但规范说:

一般来说,可移植应用程序的生命周期方法不应该 调用EntityManager或Query操作,访问其他实体 实例,或修改同一持久性内的关系 语境。

有没有一种干净、简单、便携的方法来实现这一点?


我使用单独的 EJB 服务手动完成此操作,该服务的职责是提取历史数据并将其保存为 MAP。它非常简陋,仅保存基本数据和关系 ID,但这对于我的情况来说已经足够了。

基本上我是通过一些反思来检查持久性属性。

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

使用 JPA 跟踪历史记录 的相关文章

随机推荐

  • 使用 TopMost = true 打开 WinForms 表单但不让它抢走焦点?

    我有一个在用户屏幕上弹出的表单 并且有TopMost true 但它抢走了焦点 我怎样才能得到它not当它第一次出现时就抢走了焦点 这对我有用 它提供了 TopMost 但没有焦点窃取 protected override bool Sho
  • 为什么将 static libcurl.a 添加到 xcode 7.2 示例项目中会添加 libcurl.4.dylib 依赖项

    我一直试图通过将 libcurl a 添加到我的 Xcode 7 2 项目来消除对 libcurl 4 dylib 的任何依赖 我构建了一个全新的 libcurl 并将其放置在 usr local lib 中 标头位于 usr local
  • 在 Spring 中配置特定的内存数据库用于测试目的

    我该如何配置我的春季启动应用程序 以便当我运行时单元测试它将使用在记忆中数据库如H2 HSQL但当我跑步时春季启动应用程序它将使用生产数据库PostgreSQL MySQL 为此可以使用弹簧型材 这将是一种具体的方式 具有特定于环境的属性文
  • pycharm:在“调试”模式下从标准输入读取

    我正在 PyCharm 中调试此脚本 import sys def read in lines sys stdin readlines for i in range len lines lines i lines i replace n r
  • “sys.excepthook”和线程

    我正在使用Python 2 5并尝试使用自定义excepthook在我的程序中 在主线程中它工作得很好 但在以线程模块启动的线程中 通常excepthook叫做 这是一个显示问题的示例 取消注释该注释会显示所需的行为 import thre
  • 带图像的 SVG 进度条

    我正在尝试使用 SVG 创建进度条 弧 我目前的进度条正在工作 它正在使用存储在数据属性中的值移动所需的量 并且看起来相当不错 虽然我试图让图像随着酒吧的弧线移动 图像应从 0 开始 并移动到完成点 例如 50 即位于顶部 div clas
  • 如何创建一个从 NSWindow 模态弹出的 NSPanel(Cocoa 编程)

    就像在 NSWindow 中单击按钮后显示的 NSPanel 一样 我查了很多 但没有简单的例子 谢谢你的帮助 可以这样做 IBAction showButtonAction id sender NSApplication sharedAp
  • Chrome 浏览器开发者工具:脚本多次出现

    当使用 Chrome 的开发者工具调试 Javascript 时 当我更改 重新加载 测试代码时 脚本 列表往往会添加每个脚本的多次出现 Safari 使用相同的基本工具集 但不这样做 某个脚本在此列表中出现 10 次并不陌生 发生这种情况
  • 使用新数据重新加载 ngx-graph

    我正在尝试泳道 ngx graph 在我的应用程序中用户可以删除或添加节点 根据删除或添加操作 我将相应地更新我的数据 现在真正的问题是如何在不刷新整个页面的情况下刷新图表 您可以使用以下方法更新它update 图表的选项 HTML
  • ASP.NET MVC3 部分视图命名约定

    我是 MVC 开发的新手 所以请耐心等待 真的有必要将我的部分视图命名为 Action cshtml 与 下划线 以遵守命名约定 这是我的问题我有一个控制器 StudentController 和一个操作 List 它有一个名为 List
  • 将多个正则表达式合并为一个

    我正在尝试编写一个代码将字符串连接成拉丁诗句 我已经处理了一些限制 但是我没有得到所需的输出 我的代码如下
  • Swift:标准数组的二分搜索?

    我有一个排序数组 想对其进行二分搜索 所以我问 Swift 库中是否已经有一些东西可以使用 比如排序等 或者是否有可用的类型无关版本 当然我可以自己写 但我喜欢避免再次重新发明轮子 这是我最喜欢的二分搜索实现 它不仅对于查找元素很有用 而且
  • 类型错误:$(...).selectize 不是函数

    我将 selectize rails gem 安装到了我的 Rails 应用程序中 并且正在尝试使其正常工作 我的网络控制台中不断出现此错误 TypeError selectize is not a function 并且浏览器中没有任何反
  • 使用 xcodebuild 构建等待 /"runContextManager.runContexts" 超时

    我正在设置我的 iphone 项目以与 hudson 一起运行 我的构建脚本在本地运行良好 但是当在我的雪豹服务器 mac 上执行以下命令时 xcodebuild sdk iphoneos4 3 workspace Moments xcwo
  • 单击闪亮的操作按钮后将光标聚焦在文本区域

    无论如何 我都不是 html 或 JavaScript 方面的专家 因此 我希望您能就这个问题得到帮助 我认为我应该提供应用程序的较小版本 以便能够解释问题 这是一个简单应用程序的 app R 它允许用户在文本区域中写入一个单词 单词的第一
  • Laravel 5 Dotenv 用于特定子域

    我的 laravel 5 应用程序中有几个子域 每个子域都有特定的配置 如 mail nocaptcha 等 如何设置 env 文件以与我的特定子域一起使用 是的 您可以使用单独的 env每个子域的文件 因此如果您在配置中使用环境变量 它将
  • 在 R 中的 dplyr 中分组一些其他变量后,如何保留其他变量?

    之前今天我发布了这个问题here https stackoverflow com questions 72461943 how can i add missing month value and remove duplicate in dp
  • nginx+uwsgi+django,uwsgi中似乎有一些奇怪的缓存,帮帮我

    这是 uwsgi 配置 uwsgi uid 500 listen 200 master true profiler true processes 8 logdate true socket 127 0 0 1 8000 module www
  • C#中小时和分钟的时间跨度计算

    最终结果应向用户显示开始时间和结束时间之间的时间跨度 例如 早上 06 30 开始工作 晚上 18 30 结束 显示的结果应为 12 小时 现在 我必须DateTime参数 从时间和到时间 每个DateTime参数具有 24 小时格式的小时
  • 使用 JPA 跟踪历史记录

    我想通过使用一个新表来存储日志 其中包含进行更改的用户 日期以及每次更新 插入中发生的任何更改 从而为我的模型实体之一实现历史记录跟踪 审核 我使用 EclipseLink 作为我的 JPA 提供程序 但我不想使用它历史政策 http wi