问题标签 [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.
mysql - Spring data envers - revinfo 表和 entity_aud 不存在
我使用@Audited 将envers 添加到我的Spring Boot 项目中,使用RevisionRepository<Entity, Id, RevisionId> 扩展了我的JpaRepository,有一个@EnableJpaRepositories(repositoryFactoryBeanClass = EnversRevisionRepositoryFactoryBean.class)。
我目前正在为我的数据库使用 MySql。
但是我遇到了这个错误
“db.revinfo”不存在
还可以使用自动生成的 envers 表。
我在我的配置或代码中缺少什么来解决这个问题?
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 检索对象历史记录。
谁能告诉我一些解决方案并解释为什么它会这样工作?我认为读取数据不应该需要事务,但我可能错了。
spring-boot - 循环 jpa 流结果的项目并调用更新服务。Envers 为所有项目创建一个修订版,而不是为每个项目创建一个修订版
我遍历 jpa 流结果的人员实体,并为每个人调用更新服务 bean 来更新人员实体的名称。我了解,envers 是在交易结束时执行的。好的,这工作正常,所有实体都已更新并具有 AUD 表条目,但所有实体都有一个修订版。
我如何告诉 spring 为每个人实体做一个单独的事务,以便 envers 为每个更新的实体写入一个更新修订版,而不是为所有更新的人实体?我还尝试@Transactional(propagation = Propagation.REQUIRES_NEW)
将更新服务类放在首位,但并不是每个项目都触发 envers。似乎所有更新都在一个事务中执行,但是对于更新服务 bean 的每次调用,我都需要一个事务。
流服务:
简化的更新服务:
解决方案:保存操作触发器允许为每个人实体创建一个修订,但此解决方案仅适用于我们的项目@Transactional(propagation = Propagation.REQUIRES_NEW)
。单行@Transactional
不行。注释可以放在方法或类级别,展位工作。
postgresql - Envers + Spring JPA:revinfo 不允许“用户”列
我设置了 Spring JPA + Envers (PostgreSQL) 并用 @Audited 注释了一些实体类。我添加了我的 revinfo 表,因为我想记录更改来自的帐户:
上面的代码被剪断了!但是 - 我重命名username
为user
一切的那一刻崩溃和燃烧。我收到一条神秘信息
错误:字符 33 处的“用户”或附近的语法错误
声明:插入 revinfo(时间戳、用户、rev)值($1、$2、$3)
我的第一个假设是我的类型不匹配,所以我验证了我的 liquibase 设置
当我重命名username
为 时user
,它再次崩溃并显示上述错误消息。
为什么我不能使用名为user
in的列revinfo
?
还有这些神奇的列名吗?
我在哪里可以找到有关此行为的信息?
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
任何帮助/提示将不胜感激。
spring-boot - 使用 Spring Data Envers 没有来自存储库的修订数据
根据我对数据库的监控,我已经实现了一个运行良好的 Spring Data JPA+Envers 存储库。
但我无法在我的测试中检索修订信息:
我找不到这是结构问题还是只是测试环境问题。我会接受任何建议:-)
spring-data - Hibernate Envers 没有在历史表中保存实体的初始状态
更改用户名或姓氏后,初始状态消失。
时间 #1
用户表
历史表
时间 #2
我通过 REST 调用更新用户,其初始状态消失
用户表
历史表
所以我们失去了初始状态。
我该如何解决?