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

hibernate-envers - Envers 审计实体

获取已审核实体列表的更好方法是什么?可以使用 REVCHANGES 表并从该表中查找所有已审计的实体,但我相信这不是最佳解决方案。

谢谢, 沃拉迪米尔

0 投票
1 回答
398 浏览

hibernate-envers - Envers 为 Map<> 生成“添加”+“删除”编辑而不是“修改”

我有一个声明为 a 的字段Map<MyEnum, String>,该字段已被审核。当对映射中的一个元素进行更改时,会生成两个编辑, anADD和 a DEL,而不是单个MOD,这反过来意味着尝试插入审计表时违反约束,因为有两个编辑对于同一修订中的单个实体中的单个字段。

我猜我可能可以通过制作revision_type表的键的一部分来解决这个问题(这将允许每个实体的每个字段的每种类型进行一次编辑),但这似乎是一个丑陋的黑客,除了我忘记了哪个首先发生了,事实是它是错误的。

顺便说一句,该字段正在正确保存……只是审核记录失败了。

字段声明:

我正在使用休眠 v3.5.6。

我还没有找到任何关于此的错误报告,所以我认为我做错了什么......有什么想法吗?

0 投票
1 回答
90 浏览

hibernate - Hibernate:需要为日志记录设置一个属性

我们正在使用 Hibernate Envers 进行日志记录,但是需要在我们正在跟踪历史记录的对象上设置事件类型。该属性是必需的,因此我们想到null每次lastEvent未设置时都将其放入。

所以我们尝试设置属性@PrePersist

但是显然hibernate认为这些拦截器将对象标记为脏或不脏。因此,当此代码在脏检查上运行时,即使对象上没有任何更改,lastEventModified仍然会设置为每次。falselastEventnull

我们还使用 Hibernate 的 EventListener 进行了尝试,但它们在事务之外运行,我们可以设置属性,但它们没有保存到数据库中。

两种解决方案都感觉不对,但我不知道如何以最好的方式解决这个问题。

0 投票
1 回答
112 浏览

java - 坚持特定的修订号

我阅读了 Hibernate Envers 文档,但不明白如何让以下工作:

我有两个实体:地址和订单。订单有一个地址。

创建订单时,我希望它坚持当前地址修订,因此如果相同的地址更改(生成新修订),订单仍然指向它创建时的地址修订。

我怎样才能做到这一点?

0 投票
1 回答
888 浏览

java - Hibernate Envers:是否可以根据日期截断 Aud 表

1) 有没有办法限制 Envers 审计跟踪的范围?

我们需要 1 周的审计跟踪,Envers 非常适合,但我们也有一些关于超出该时间范围的数据保留的合同义务。

1.1) 是否可以配置 envers 以根据修订时间截断其 _AUD 表?

1.2) 如果我使用定时查询直接从数据库中删除数据,hibernate 会崩溃或抱怨吗?或者是否有替代的、API 友好的方式来删除审计历史?

0 投票
1 回答
20048 浏览

java - 如何不使用 Hibernate Envers 审计连接表和相关实体?

我使用 Hibernate Envers 来审计我的实体。

我有一个经过审计的实体 ,Foo它具有List<Bar>as 属性。但是,我不想审计Bar实体。因此,我写道:

现在,我想检索以下版本Foo

不幸的是,当我想检索所有数据时(即当它延迟加载时bars),我得到错误ORA-00942: table or view does not exist,因为它试图查询:

我虽然使用@Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED),Hibernate Envers 会保持与当前实体的Bar项目的链接。

那么我怎样才能解决我的问题,而不必明确审计表T_BART_FOO_BAR(连接表)?换句话说,当我bars从我的修订实体中检索列表时,我会bars从我当前的实体中获取列表(因为和之间的链接Foo没有Bar被审计)。

谢谢。

0 投票
1 回答
1082 浏览

java - 如何为使用 envers 的代码创建 Junit?

我要编写一个 JUnit 来检查是否正在维护版本(在事件中)。这是我使用 JUnit 所做的:

为 dao 调用 delete 会导致

UnsupportedOperationException:无法写入只读对象

我使用 Ehcache 进行缓存。我搜索了这个问题并知道这可能是因为CacheConcurrencyStrategy我想删除的域对象设置错误。我检查了。

对于域对象,没有CacheConcurrencyStrategy. 但是嵌套对象已CacheConcurrencyStrategy设置为READ_WRITE(这可能是真正的罪魁祸首)。

但我不想更改现有域和现有代码。有没有办法绕过CacheConcurrencyStrategyJUnit?如果没有,是否有任何可能的出路而不更改现有代码?

0 投票
4 回答
11332 浏览

java - 使用 envers 列出每个实体的最新版本

我正在尝试检索尚未删除的所有实体的最新版本。使用子选择在 SQL 中执行此操作非常简单:

但我不知道如何通过 envers API 实现这一点。我从 AuditReader 开始,但没有找到选择不同对象的方法

重要:我想在一个或至少两个查询中执行此操作,因为我有很多文章(实体)有很多修订。

非常感谢!

0 投票
1 回答
1945 浏览

spring - How to inject current user in the Hibernate rev Entity

I used Spring 3.1, JPA 2 and Spring Data JPA(Hibenrate 4.1) in my project, and used Hibernate Envers(shipped with Hibernate 4) to audit some properties, I want to store the current logged in user in the related rev table, how to implement this? Thanks.

0 投票
1 回答
17182 浏览

hibernate-envers - Hibernate Envers - org.hibernate.exception.ConstraintViolationException:无法执行 JDBC 批量更新

我将 Hibernate Envar 用于审计目的。

这是我的代码和配置

hibernate.cfg.xml 文件配置

一个使用@Audited 注释的示例实体

我创建了一个 RevistionEntity 来为已登录用户记录审计,我们将审计记录为

这是我的听众课

对于插入/删除,它工作正常。

但是对于更新查询,它给出了以下异常

这是我所有实体的通用更新代码