问题标签 [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 投票
0 回答
1895 浏览

java - 使用 Hibernate Envers 将子实体的映射审计为值

我有一个Parent实体,它将一个Child实体作为地图中的一个值。地图中的键是一个枚举(见下面的简单代码)。不幸的是,使用@AuditJoinTable表名不会创建预期的“parent_children_aud”表。

是否支持对地图引用的审核?还是我做错了什么?

使用休眠 3.6.0。

父类:

儿童班:

我的枚举:

hbm.xml:

0 投票
4 回答
9983 浏览

hibernate - 如何使用 org.hibernate.tool.EnversSchemaGenerator 生成 Envers 数据库模式?

我将 Hibernate 更新为 4.1.1.Final 版本。根据文档 有两种方法可以生成数据库模式:

  1. 蚂蚁任务org.hibernate.tool.ant.EnversHibernateToolTask
  2. org.hibernate.tool.EnversSchemaGenerator从 Java运行。

Hibernate-tools 不适用于 Hibernate-4.1.1.Final。它有一个阻塞错误

我发现只有发行说明和一个测试用例。那么如何使用org.hibernate.tool.EnversSchemaGenerator我的 persistence.xml 和 Maven?

更新:

在 Hibernate 论坛上找到相关主题。我的问题似乎还没有答案。

0 投票
1 回答
488 浏览

sql - 在内部查询中选择最大值<在外部查询中选择另一个

我有两个审计表:Trip_aud 和 Event_aud。它们是在 Envers 中创建的,但我使用 SQL 查询它们。它们与域表基本相同,除了每次更改时都会增加一个修订值,并且在审计表中插入一些元组。

当 Trip 从某个状态(PLANNING-> EXECUTING)发生变化时,我会存储它的当前修订版,因此之后我可以将执行的内容(例如,离开时间)与计划的内容进行比较。这些事件(离开、停止、等待......)存储在 Event 中,并带有指向 Trip 的指针。事件也被审计。

Envers 像 CVS 系统一样工作:如果我在给定修订版中查询某个元素,它会搜索最大修订版小于给定修订版的元组。我感兴趣的版本是 Trip 中的版本,当它改变状态时存储。如何从给定修订版的行程中选择所有事件?

这是桌子的样子。org_rev是状态更改的行程修订。

如果我想要第 3 版的旅行和活动,我会得到

在修订版 44 中,当规划完成时,它是

我进行了以下查询来比较计划和执行,但它什么也没返回!它在 EVENT_AUD 中进行自联接,驱逐仅在修订顺序上不同的元组重复项,并尝试选择rev小于org_rev行程的最大值。

奇怪的是,如果我t.org_rev用 44 替换,它可以工作!我究竟做错了什么?

谢谢你的帮助!

META:是否希望以 CSV、XML、INCLUDE INTO 或其他任何形式提供一个小数据库示例,以便人们可以测试我要求的 SQL?我怎样才能附上这个问题?

0 投票
3 回答
3901 浏览

java - Hibernate Envers:检索具有集合属性的实体的正确修订

我有两个经过审计的实体 A 和 B。实体 A 拥有实体 B 的集合(注释为一对多关系)。将 A 的新实例插入数据库时​​,A 和 B 的所有行都处于同一修订版(假设是修订版 1)。然后,对 A 的更新仅影响实体 B 的实例。因此更新后,实体 A 仍处于修订版 1,而 B 的实体处于修订版 2(包括审计表中的 MOD 条目) . 在修订版 3 中,实体 A 被删除。因为实体 B 的集合使用@Cascade 注释,所以属于 A 的实体 B 也被删除。

鉴于这种情况,我如何使用 Envers 创建一个审计查询,该查询获取实体 A 的实例以及修订版 2 的更新实体 B?当我查询实体 A 的所有修订版时,我要么得到 A 的已删除实体,它不包含 B 的实体(修订版 3),要么我得到修订版 1 的 A 也包含修订版 1 的 B 实体。

如果有帮助,请使用 Hibernate 3.6。

0 投票
2 回答
674 浏览

hibernate - 通过 gradle 构建 Hibernate 4.1.2.final 的问题

由于HHH-6960,我正在尝试修补休眠。但是,执行时会出现以下问题gradle clean build

这个直接开箱即用,没有任何修改......我只是下载了hibernate和gradle并运行它。我是 gradle 新手,所以我做错了什么?

提前致谢。

0 投票
1 回答
492 浏览

java - 对更改的实体使用批准/拒绝概念的可能性?

我目前正在探索环境并阅读文档。我的一项要求 envers 没有满足(正如我现在所想的那样)。也许确实如此,有人可以向我指出某些事情或对此有其他解决方案。

要求是需要由第二个用户查看更改的数据。第二个用户可以选择批准或拒绝更改。批准时应进行更改,拒绝时应回滚更改。envers 是否支持这一点,还是我应该在原始数据库表中插入我自己的“已批准”标志?

0 投票
2 回答
2411 浏览

java - Hibernate Envers 管理的审计表的主键是什么?

我正在使用 Hibernate Envers 来审计一些实体。我手动创建了关联的审计表。但是,我无法确定审计表的主键应该是什么。例如,考虑一个用于存储客户的虚构表格:

然后创建审计表:

以下是我考虑的选项:

首要的关键:REVISION_ID

这不能是主键,因为同一类的多个实体可能在同一修订期间被修改。

主键: ( REVISION_ID, CUSTOMER_ID)

这似乎更有可能,但我不确定 Envers 是否会在每次修订时为每个客户插入多条记录。

主键: ( REVISION_ID, REVISION_TYPE_ID, CUSTOMER_ID)

这似乎有点矫枉过正,但 Envers 可能会在每个客户的每个修订版本中插入不同类型的记录 ( add,modify或)。delete

主键:新列

也许主键必须只是包含合成主键的另一列。


Hibernate Envers 管理的审计表的真正主键是什么?

0 投票
2 回答
2392 浏览

hibernate - 如何检索经审计的关系修订?

这是我的用例

我有两个实体:Personn 和 Email(@OneToMany 关系)。两者都经过审核。

首先我创建一个新的 Personn,带有一个电子邮件(=> 他们都有一个修订版 1),然后我修改了电子邮件(=> 电子邮件有一个修订版 2,但 Personn 只有一个修订版 1)

在 Web 应用程序中,最终用户只有一个视图来显示人员的属性以及他的电子邮件属性。在此视图中,我想显示此 Personn 的所有现有修订。但是当我查询审计系统时,它没有显示修订版 2,因为 Personn 没有被修改。

我理解技术问题,但从最终用户的角度来看,他希望看到修订版 2,因为他修改了人员的电子邮件!他不知道(也不必知道)我们决定将这些信息分成 2 个 Java 对象。当然,这个问题不仅适用于 Personn-Email 关系(我在 Personn 和其他显示在同一视图中的对象之间有很多关系 - Adress、Job、Site、Card 等等)

我想到了2个解决方案:

1-查询所有关系以了解是否存在修订(但我想它会生成一个大请求或多个请求 - 我有很多关系)。

2- 将“hibernate.listeners.envers.autoRegister”设置为 false,编写我自己的 EnversIntegrator 和事件实现。在事件实现中(覆盖默认的 Envers 实现),当电子邮件的属性被修改时,我将为 Personn 创建一个 ModWorkUnit(当然它不会被硬编码:在 personn 字段上添加一个自定义注释,如 @AuditedPropagation)。该解决方案的缺陷是即使没有修改,也要为 Personn 创建很多行。

您如何看待这些解决方案?您知道解决这种用例的更好方法吗?

感谢您的建议。

0 投票
1 回答
978 浏览

hibernate - 可能的 Envers 有效性审计策略错误 - 任何人都可以确认吗?

我们有一个在 JBoss AS 7 上运行的 Seam 2 应用程序。为了加快访问实体的历史修订,我们切换到 Envers Validity Audit Strategy。一切似乎都很好,但是保存一种特定类型的实体会导致

错误。关闭有效性审计策略解决了这个问题。

是否有人在有效性审计策略方面取得了任何成功(文档确实说它是实验性的)?

我应该指出我们使用的是 Hibernate 3.6.8.Final。

0 投票
1 回答
1994 浏览

hibernate-envers - Hibernate Envers:跟踪 OneToMany 关系拥有方的修订

我有两个经过审计的实体 A 和 B。实体 A 拥有实体 B 的集合(注释为一对多关系)。将 A 的新实例插入数据库时​​,A 和 B 的所有行都处于同一修订版(假设是修订版 1)。然后,对 A 的更新仅影响实体 B 的实例(级联类型为合并)。因此更新后,实体 A 仍处于修订版 1,而 B 的实体处于修订版 2(审计表中的新 MOD 条目)。

问题是当我检索 A 的所有修订时,我希望得到 2 个修订作为回报:一个用于创建,一个用于修改 B 的拥有集合。在 ManyToMany 的情况下我可以得到这种行为,但我可以不要让它与 OneToMany 关系以相同的方式工作。

(我使用的是 Hibernate 3.6.10-Final)