HibernateEnvers为单个事务中每个模型的更改创建一个新的修订版

ergxz8rk  于 2021-07-26  发布在  Java
关注(0)|答案(0)|浏览(321)

我们有一个要求,即不使用当前时间戳作为revtstmp的值,而是必须从审核的模型的日期字段中选择一个值。
示例:我们有1个@audited字段和另一个date字段
型号.等级
字符串字段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 {
}

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题