是否可以为CommitPropertiesProvider提供依赖于对象的映射?

时间:2019-08-16 01:42:46

标签: javers

我正在使用Javers跟踪记录历史更改(在ModerationEntity上),并且有必要在我的特定情况下使用某些条件来检索它,就是过滤其中一些具有ListEntity(id = 51)的条件。

ModerationEntity
{
  "requestedPublicationStatus": "PUBLISHED_NATIONAL",
  "currentPublicationStatus": "UNPUBLISHED",
  "id": 1000004,
  "list": {
    "entity": "ListEntity",
    "cdoId": 51
  },
  "status": "IN_MODERATION"
}

环顾Javers JQL示例之后,除了commit-property-filter之外,我没有找到其他解决方案。但是,当我将Javers与SpringBoot一起使用时,Javers提交是通过JaversSpringDataJpaAuditableRepositoryAspect执行的。为了将提交属性存储到数据库中,我们需要定义CommitPropertiesProvider(默认为EmptyPropertiesProvider),不幸的是,目前看来,我们只能定义静态提交属性映射(根据API)。

public interface CommitPropertiesProvider {
    Map<String, String> provide();
}

我的想法是,如果有可能将关注对象传递到CommitPropertiesProvider#provide()API中,那么我们可以根据上下文构造提交属性。

public interface CommitPropertiesProvider {
    Map<String, String> provide(Object domainObject);
}

通过我可以轻松地声明自己的CommitPropertiesProvider来定义每次提交的映射值返回。

public class CustomCommitPropertiesProvider implements CommitPropertiesProvider {
    public Map<String, String> provide(Object domainObject) {
        if (domainObject instanceof ModerationEntity) {
            // return map with key = "listId" & value = ModerationEntity#listId
        }
        // return emptyMap
    }
}

当前,除了关闭springDataAuditableRepositoryAspect

之外,我找不到任何解决方案。
javers.springDataAuditableRepositoryAspectEnabled=false

然后使用我自己的方面覆盖(从AbstractSpringAuditableRepositoryAspect扩展),以便注入我想要的逻辑。

0 个答案:

没有答案