问题标签 [hibernate-envers]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
36813 浏览

java - Hibernate EnVers 中的@NotAudited 和 RelationTargetAuditMode.NOT_AUDITED 有什么区别?

为什么要同时使用?两者都用好还是一个就够了?

0 投票
1 回答
369 浏览

java - PHP 等价于 Envers

我想知道是否有任何等效于 php 的 JBoss Envers。

0 投票
3 回答
3391 浏览

java - Envers 如何处理架构更改?

我正在考虑从自我实现的版本控制解决方案切换到 Hibernate Envers,但我还不太确定。我已经阅读了很多关于它的内容,但我担心模式更改以及 Envers 在根据旧模式对历史数据进行处理后如何处理它们。

在这方面,您对 Envers 有何经验?您如何使用 Envers 处理架构更改和现有数据?

更新1:

这不仅仅是添加从表中删除简单的列,而是例如将简单的外键关系更改为具有两个 1:n 关系的单独实体(具有属性列的 M2M。这是您的“逻辑”更改数据模型。在使用 Envers 时,如果根据旧模型已经有历史数据,您如何处理?是否有替代手动编写 sql 脚本并将它们转换为新表示的替代方法?

0 投票
1 回答
4124 浏览

spring - 从 before_completion 同步操作中捕获的异常:org.hibernate.SessionException:会话已关闭!

我正在使用 Spring 和 Hibernate Envers 将记录插入审计表。当 Wicket 应用程序 (web) 调用服务时,我看到 Spring 使用 OpenSessionViewFiler 并将 flushmode 设置为 Manual。AuditProcess 类中 doBeforeTransactionCompletion 方法中的代码如下:

IsManual 变为真,然后它使用临时会话将记录插入审计表。它工作正常。

我们在 WebSphere 中有另一个应用程序 EJB、Spring、Hibernate。当我们从 EJB 调用相同的服务时,flushmode 变为 AUTO,并且在上述方法中的 AuditProcess 类中失败并出现错误:

请让我知道您解决此问题的想法:

谢谢你的帮助,文卡特

0 投票
1 回答
507 浏览

hibernate - Shiro、Hibernate 和 Envers

我已经实现了 shiro 并且运行良好。我们现在正在尝试实现 envers 以在休眠状态下对我们的实体进行审计日志记录,并且效果也很好。一个问题是我们试图让主题在正常模式和 runAs 模式下都从 shiro 进行更改。
Shiro 从当前线程中获取主题,并且似乎在调用 envers 的 AuditEventListener 时它已经在一个单独的线程中。在hibernate中将shiro的主题绑定到当前线程的好钩子在哪里。Shiro 已经有方法可以做到这一点,但我需要重写 hibernates 事件调用者以某种方式将主题绑定到新线程,或者向事件中添加额外的数据,以便我稍后获取它。

0 投票
0 回答
2178 浏览

hibernate-envers - 使用 hibernate.cfg.xml 进行 Envers 配置

我正在尝试使用 Envers 审核更新/插入到我的表中。我在数据库中创建了扩展名为 _AUDIT 的审计表。

但是当我实际运行应用程序时,我在审计表中看不到任何条目。我什至没有抛出错误或异常。条目被插入到主表中,但 AUDIT 表没有更新。

这是我的 ENVERS 配置:

休眠.cfg.xml:

我的表如下:

审计表是同一个模式中的 TRANSACTION_AUDIT。

谁能告诉我为什么审计不起作用?

0 投票
2 回答
6188 浏览

java - 使用 Hibernate 环境查找最近删除的实体

所以我的问题是我需要找到特定类的所有最近删除的实体,即自特定时间戳以来已被删除的实体。具体来说,我想查找在过去一小时内删除的实体。

我所有的实体都有一个创建和更新的时间戳,我用监听器正确维护:

我还使用 Envers 并注释我的实体。

所以猜测一下,我的查询应该是这样开始的:

但我不知道该放什么来查找自日期时间以来已删除的预订。

0 投票
1 回答
6880 浏览

jpa - 获取影响特定对象的完整 Envers 修订版

修订数据的存储方式 每个受修订影响的对象都会在_AUD表中获得单独的记录。因此,当我搜索影响 object 的修订时A,我将返回 revision3用于 object的条目B,但如果 objectsA和/或C在 revision 中也发生了更改,3则不会返回这些条目,给人的印象B是唯一修改的对象那个修订。我要做的是对于每个影响 object 的修订B,返回受该修订影响的所有对象。

我一直在尝试通过运行初始查询来查找相关修订来做到这一点:

然后为每个结果运行以下查询:

但这导致QuerySyntaxException

别名 'r' 的重复定义 [从 models.AgentShift_AUD e、models.RevisionData r、models.RevisionData r 中选择 e、r、r 其中 e.originalId.REV.id in (:_p0) 和 e.originalId.REV.id = r.id and e.originalId.REV.id in (:_p1) and e.originalId.REV.id = r.id order by e.originalId.REV.id asc, e.originalId.REV.id asc]

我已经尝试了几种变体,这些变体都导致了相同的“别名'r'的重复定义”。还有什么我可以尝试的吗?

0 投票
1 回答
940 浏览

java - 使用 Hibernate Envers 时如何在审核后立即获得 rev id

我正在使用 Hibernate Envers 进行审计。它工作正常。但是,我尝试在修改数据后立即获取 rev id。我有 CustomRevisionEntity 如下:

和 CustomRevisionListener:

那么,当例如像下面这样更新地址时,如何获取 rev id?

谢谢!

0 投票
1 回答
1600 浏览

java - 将数据传递给 envers 修订监听器

我正在尝试使用 Enver 的 RevisionEntity 存储修订注释,以便它与修订 ID 和时间戳在同一个表中,并且即使更改了多个实体也只存储一次。

我目前的做法是

  • 处理请求的控制器操作将注释放入会话变量中
  • 我的自定义 RevisionListener 读取会话变量,将注释添加到 RevisionEntity,并清除会话变量

不过,我对这种方法并不满意。似乎它很容易出现竞争条件和其他愚蠢的行为。有什么办法可以让这个更稳固吗?也许通过直接在控制器操作中访问 RevisionEntity ?