我正在使用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扩展),以便注入我想要的逻辑。