如何解决Hibernate Envers 在单个事务中为每个模型的更改创建一个新修订
我们有一个要求,不是使用当前时间戳作为 revtstmp 的值,而是必须从已审核模型的日期字段中选择一个值。
示例:我们有 1 个 @Audited 字段和一个其他日期字段
模型.class
字符串字段1; String field2;
@Audited 整数字段3;
日期字段4;
每当 field3 发生更改时,我们不想为所有模型创建单个修订版(与当前时间戳相关联),而是希望为每个已更改的模型创建一个单独的修订版,并将该修订版与日期值相关联field4 对应的模型。
问题是 CustomRevisionListener 在事务结束时只创建了一次修订。我们尝试使用@Transactional(propagation = Propagation.REQUIRES_NEW) 并分别保存每个模型,但它仍然只为最后更新的模型创建了 1 个修订版。
@Configuration
public class CustomRevisionListener implements RevisionListener {
@Override
public void newRevision(Object revisionEntity) {
CustomRevisionModel customRevisionEntity = (CustomRevisionModel) revisionEntity;
Object obj = ContextLookup.getCurrentEntity();
if (DealModel.class.isInstance(obj)) {
DealModel model = (DealModel) obj;
customRevisionEntity.setTimestamp(model.getLastStageChangeAt().getTime());
}
}
}
@Entity
@RevisionEntity(CustomRevisionListener.class)
@Table(name = "rev_entity",schema = "audit")
public class CustomRevisionModel extends DefaultRevisionEntity {
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。