问题标签 [spring-data-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 回答
132 浏览

mysql - Spring data envers - revinfo 表和 entity_aud 不存在

我使用@Audited 将envers 添加到我的Spring Boot 项目中,使用RevisionRepository<Entity, Id, RevisionId> 扩展了我的JpaRepository,有一个@EnableJpaRepositories(repositoryFactoryBeanClass = EnversRevisionRepositoryFactoryBean.class)。

我目前正在为我的数据库使用 MySql。

但是我遇到了这个错误

“db.revinfo”不存在

还可以使用自动生成的 envers 表。

我在我的配置或代码中缺少什么来解决这个问题?

0 投票
0 回答
301 浏览

hibernate - 如果没有 @Transactional 注释,Hibernate Envers AuditReader 将无法工作

我在我的项目中通过简单的配置使用 Hibernate Envers。

pom.xml

环境配置

AuditorAwareImplementation只是 AuditorAware 的简单实现

我还AuditReader用来读取某些实体的更改。我的方法总是抛出java.lang.IllegalStateException: Session/EntityManager is closed.

如果我运行带有@Transactional注释的方法,一切都会很好。在另一个@Transactional具有非常相似的配置和旧 Spring Boot 版本的项目(没有)中,没有@Transactional.

其实我不知道发生了什么。

有效的代码:

不起作用的代码:

使用以下内容查找实体的代码EntityManager

如果我在上面执行和调试代码,它会正确检索实体,entityManager并且我看到它object具有一些属性。但是继续使用该方法-它会为下一行引发相同的异常,我想在其中使用 Envers 检索对象历史记录。

谁能告诉我一些解决方案并解释为什么它会这样工作?我认为读取数据不应该需要事务,但我可能错了。

0 投票
2 回答
83 浏览

spring-boot - 循环 jpa 流结果的项目并调用更新服务。Envers 为所有项目创建一个修订版,而不是为每个项目创建一个修订版

我遍历 jpa 流结果的人员实体,并为每个人调用更新服务 bean 来更新人员实体的名称。我了解,envers 是在交易结束时执行的。好的,这工作正常,所有实体都已更新并具有 AUD 表条目,但所有实体都有一个修订版。

我如何告诉 spring 为每个人实体做一个单独的事务,以便 envers 为每个更新的实体写入一个更新修订版,而不是为所有更新的人实体?我还尝试@Transactional(propagation = Propagation.REQUIRES_NEW)将更新服务类放在首位,但并不是每个项目都触发 envers。似乎所有更新都在一个事务中执行,但是对于更新服务 bean 的每次调用,我都需要一个事务。

流服务:

简化的更新服务:

解决方案:保存操作触发器允许为每个人实体创建一个修订,但此解决方案仅适用于我们的项目@Transactional(propagation = Propagation.REQUIRES_NEW)。单行@Transactional不行。注释可以放在方法或类级别,展位工作。

0 投票
1 回答
202 浏览

postgresql - Envers + Spring JPA:revinfo 不允许“用户”列

我设置了 Spring JPA + Envers (PostgreSQL) 并用 @Audited 注释了一些实体类。我添加了我的 revinfo 表,因为我想记录更改来自的帐户:

上面的代码被剪断了!但是 - 我重命名usernameuser一切的那一刻崩溃和燃烧。我收到一条神秘信息

错误:字符 33 处的“用户”或附近的语法错误
声明:插入 revinfo(时间戳、用户、rev)值($1、$2、$3)

我的第一个假设是我的类型不匹配,所以我验证了我的 liquibase 设置

当我重命名username为 时user,它再次崩溃并显示上述错误消息。

为什么我不能使用名为userin的列revinfo
还有这些神奇的列名吗?
我在哪里可以找到有关此行为的信息?

0 投票
0 回答
179 浏览

hibernate-envers - Spring envers 不审核 OneToMany 关系

我目前正在与 Hibernate Envers 和 Spring Envers 支持相结合。我有一个简单的 Connection 实体,它具有带有一组参数的单向 OneToMany 映射。从我的应用程序的角度来看,这是一个复合聚合。所以参数属于连接,没有连接就无法生存。

现在,我的问题是当我更新连接的参数时,Hibernate Envers 不会创建新的修订版。这是预期的行为还是我做错了什么?我修改了连接对象上的参数,并将该对象与 spring-data JPA 存储库一起存储。在这种情况下,我希望在 _AUD 表中创建连接的新版本、n:m 映射表和相应的参数实体。不幸的是,仅在 PARMETER_AUD 表中创建了一个新版本。

这是我的两个实体:

这是我的一个单元测试用例:

完整示例可在以下位置找到: https ://github.com/svesch84/spring-envers-test

任何帮助/提示将不胜感激。

0 投票
1 回答
32 浏览

spring-boot - 使用 Spring Data Envers 没有来自存储库的修订数据

根据我对数据库的监控,我已经实现了一个运行良好的 Spring Data JPA+Envers 存储库。

但我无法在我的测试中检索修订信息:

我找不到这是结构问题还是只是测试环境问题。我会接受任何建议:-)

0 投票
0 回答
23 浏览

spring-data - Hibernate Envers 没有在历史表中保存实体的初始状态

更改用户名或姓氏后,初始状态消失。

时间 #1

用户表

历史表

时间 #2

我通过 REST 调用更新用户,其初始状态消失

用户表

历史表

所以我们失去了初始状态。

我该如何解决?