- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我遍历 jpa streamresult 的个人实体,并为每个人调用一个更新服务 bean 来更新个人实体的名称。我明白,envers 是在交易结束时执行的。好的,这工作正常,所有实体都已更新并有一个 AUD 表条目,但所有实体都只有一个修订版。
我如何告诉 spring 为每个人实体执行一个事务,以便 envers 为每个更新的实体写入一个更新修订而不是为所有更新的个人实体?我还尝试将 @Transactional(propagation = Propagation.REQUIRES_NEW)
放在更新服务类的顶部,但并不是每个项目都会触发 envers。似乎所有更新都在一个事务中执行,但我需要为更新服务 bean 的每次调用执行一个事务。
流媒体服务:
@Service
class StreamService {
@Autowired
PersonRepository repo;
@Autowired
FooService fooService;
@Transactional
public void uppercaseAllNames() {
Stream<Person> stream = repo.findAllPersons();
// change name for each person
stream.forEach(fooService::doFoo);
}
}
简化的更新服务:
@Service
@Transactional(propagation = Propagation.REQUIRES_NEW) // <=== create new transaction
class FooService {
@Autowired
PersonRepository repo;
doFoo(Person person) {
String name = person.getName();
person.setName(name.toUpperCase());
repo.save(person); // <=== save trigger envers
}
}
解决方法:保存操作触发 envers 以创建每个人实体的修订,但此解决方案仅在我们的项目中适用于 @Transactional(propagation = Propagation.REQUIRES_NEW)
。单个 @Transactional
不起作用。注释可以放置在方法或类级别,展台位置工作。
最佳答案
从 uppercaseAllNames
中删除 @Transactional
。这将为您提供读取和每次写入的单独事务。
您需要将 personRepo.save(person)
添加到 FooService.doFoo
以保留更改。
第二个更改可能对 Propagation.REQUIRES_NEW
就足够了,但我发现嵌套事务相当困惑,建议避免使用它们。
关于spring-boot - 循环遍历 jpa streamresult 的项目并调用更新服务。 Envers 对所有项目创建修订,而不是为每个项目创建修订,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67386737/
Hibernate Envers 是否可以将另一个数据库用于审计表? 最佳答案 您可以使用不同的架构/目录。见 org.hibernate.envers.default_schema和 org.hib
我在我的应用程序中使用 Hibernate Envers 来存储审计跟踪数据,所有与审计相关的信息都正确存储在 *_AUD 表中。但是,所有_AUD表中rev列的数据类型都是Integer数据类型。我
我是 hibernate envers 的新手。我已经成功地为每个实体创建了审计表。但是我不知道如何为每个实体读取这些历史记录。我想在 jsp 中显示这个历史记录。我想阅读所有的历史记录对于那个特定的
我想使用 hibernate envers 在审计表上应用 group by。 我怎样才能做到这一点? 最佳答案 不幸的是,Envers 不支持 Group by。 关于hibernate-enver
我正在尝试使用 hibernate-envers 审核@Embeddable 对象的集合。 根据 https://hibernate.atlassian.net/browse/HHH-6613添加了对
使用 Hibernate Envers 我想获得所有 实体 , 修订号 , 修订日期 和 修订类型 实体的 ID。 目前我这样做是为了获取实体、修订号和修订日期: public List obtene
我从休眠的 Envers 3.6 移植到 Envers 4.0。这个新版本没有 审计事件监听器 .旧版本要求:listeners 我找不到如何配置新版本。 最佳答案 在 4.0 版中:
我的应用程序使用 envers 将数据写入 _aud 表,并将其包装到写入另一个表的 xml 中。我在 Envers 4.3 中使用条件审核来完成此操作。我的类扩展了 EnversIntegrator
我需要为项目中的所有 CRUD 操作实现审计历史记录。该项目使用 Spring JPA Data Rest。我四处寻找好的图书馆来完成所需的任务,并遇到了这个 Hibernate Envers ,这看
我正在做很多 rnd 来为一个大项目做审计。该项目将完全基于带有 JPA 和 Hibernate 的 Spring 框架来完成数据映射部分。对于审计,我遇到了各种特性和技术。使用 Hibernate
用户有 n 个联系人。联系人可以有本地化的评论(评论在联系人之间共享)。 Java Bean: @Audited @Entity public class User { @OneToMany(
我无法使用连接表( https://stackoverflow.com/a/7603036 和 https://en.wikibooks.org/wiki/Java_Persistence/ManyT
我有一个 Envers 查询返回一个惰性结果,尽管该字段在 hibernate 映射中定义为惰性 =“false”。 我在 Hibernate-Envers 论坛上查找过它,但没有找到任何有用的信息。
使用 JBoss Envers (4.2.0 FINAL) 注释但在尝试审计 @Enumerated 属性时失败 @Entity @Audited public class TestEntity ex
项目使用 Hibernate 3.5、Spring Webflow 2 和 Hibernate Envers 进行审计。 Envers 在 hibernate.cfg.xml 中配置。我在实体“Art
我正在我正在从事的项目中实现 Hibernate Envers,对于此客户端,数据库中的表和列必须遵循特定的名称模式。名称模式使用表名来生成部分列名,并且保存修订的表与原始表具有不同的名称(当然),因
我有一个正在运行的 ENVERs 项目,我正在完成该项目的实现,并注意到属性级别修改跟踪功能。此功能听起来非常适合我们的需求,并将取代一些(手动)表。 问题就出在这里;我在数据库中设置了字段,但当我更
我有一个 envers 查询来查找给定实体的历史记录,我想做的是使用请求中指定的谓词。 例如,我希望能够根据发送的请求按日期/用户/修订类型等(或字段组合)进行过滤。 我知道如何添加谓词,我只是想知道
跟进这三个主题: Getting the old value and new value between two revisions withHibernate Envers Diff on hibe
Doctrine 1.x 和 2 都以单独的审计表的形式提供某种 Versionable 支持,用于跟踪随时间的变化。然而,这些版本似乎是为每行使用(即,它们都维护自己的版本号)而不是数据库范围的,例
我是一名优秀的程序员,十分优秀!