Spring boot Hibernate Envers为单个事务中每个模型的更改创建一个新的修订版

Spring boot Hibernate Envers为单个事务中每个模型的更改创建一个新的修订版,spring-boot,hibernate,hibernate-envers,Spring Boot,Hibernate,Hibernate Envers,我们有一个要求,即不使用当前时间戳作为revtstmp的值,我们必须从审计的模型的日期字段中选择一个值 示例:我们有1个@Audited字段和一个其他日期字段 模型类 字符串字段1; 字符串字段2 @审计 整型字段3 日期字段4 每当字段3发生更改时,我们都希望为每个已更改的模型创建一个单独的修订,而不是为所有模型创建一个单独的修订(与当前时间戳相关),并将该修订与相应模型的日期字段4的值相关联 问题是CustomRevisionListener在事务结束时只创建了一次修订。我们尝试使用@Tra

我们有一个要求,即不使用当前时间戳作为revtstmp的值,我们必须从审计的模型的日期字段中选择一个值

示例:我们有1个@Audited字段和一个其他日期字段

模型类

字符串字段1; 字符串字段2

@审计 整型字段3

日期字段4

每当字段3发生更改时,我们都希望为每个已更改的模型创建一个单独的修订,而不是为所有模型创建一个单独的修订(与当前时间戳相关),并将该修订与相应模型的日期字段4的值相关联

问题是CustomRevisionListener在事务结束时只创建了一次修订。我们尝试使用@Transactional(propagation=propagation.REQUIRES_NEW)并分别保存每个模型,但它仍然只为上次更新的模型创建了一个修订版

@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 {
}