Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
AbstractMongoEventListener,用于识别更新或添加事件spring boot mongoDb_Spring_Mongodb_Spring Boot_Spring Data Jpa_Spring Data - Fatal编程技术网

AbstractMongoEventListener,用于识别更新或添加事件spring boot mongoDb

AbstractMongoEventListener,用于识别更新或添加事件spring boot mongoDb,spring,mongodb,spring-boot,spring-data-jpa,spring-data,Spring,Mongodb,Spring Boot,Spring Data Jpa,Spring Data,我正在尝试使用SpringDataMongoDB应用更新和删除操作的审计。对于add操作,我使用下面的模型在数据库中查找add,它工作得非常好 public class Audit { @CreatedBy private String CreatedBy; @CreatedDate private Instant createdDate; @LastModifiedBy private String lastModifiedUser;

我正在尝试使用SpringDataMongoDB应用更新和删除操作的审计。对于add操作,我使用下面的模型在数据库中查找add,它工作得非常好

public class Audit {
    @CreatedBy
    private String CreatedBy;

    @CreatedDate
    private Instant createdDate;

    @LastModifiedBy
    private String lastModifiedUser;

    @LastModifiedDate
    private Instant lastModifiedDate;
}
如何维护更新和删除操作的历史记录?我知道spring数据中有mongoDb的生命周期挂钩

@Component
@EnableMongoAuditing
public class GenericAuditing extends AbstractMongoEventListener<Object> {
    private MongoTemplate mongoTemplate;
    private static final Logger LOG = LoggerFactory.getLogger(GenericAuditing.class);

    public GenericAuditing(MongoTemplate mongoTemplate) {
        this.mongoTemplate = mongoTemplate;
    }
    @Override
    public void onAfterSave(AfterSaveEvent<Object> event) {
        LOG.info("On After Save inserting the record to the Delete and update collection");
        
    }

    @Override
    public void onAfterDelete(AfterDeleteEvent<Object> event) {
        LOG.info("On After delete inserting the record to the Delete and update collection");
        Object obj = event.getSource();
        DeleteUpdateAudit deleteUpdateAudit = new DeleteUpdateAudit(obj, DatabaseAction.DELETE);
        this.mongoTemplate.insert(deleteUpdateAudit);
    }
}
@组件
@启用自动编辑
公共类GenericaAuditing扩展了AbstractMongoEventListener{
私有MongoTemplate MongoTemplate;
私有静态最终记录器LOG=LoggerFactory.getLogger(GenericAuditing.class);
公共通用审计(MongoTemplate MongoTemplate){
this.mongoTemplate=mongoTemplate;
}
@凌驾
AfterSave上的公共无效(AfterSaveEvent事件){
LOG.info(“保存并将记录插入删除和更新集合后打开”);
}
@凌驾
AfterDelete上的公共无效(AfterDeleteEvent事件){
LOG.info(“删除后打开,将记录插入删除和更新集合”);
Object obj=event.getSource();
deleteUpdateAudi DeleteUpdateAudit=新的DeleteUpdateAudit(obj,DatabaseAction.DELETE);
this.mongoTemplate.insert(deleteUpdateAudit);
}
}

如何确定onAfterSave用于保存或更新。因为保存和更新操作都会调用该方法。审核删除和更新操作的最佳方法是什么

关于识别保存或更新,您可以查看
AfterSaveEvent
中的
文档
。如果它有一个
\u id
,则它是一个更新:

    @Override
    public void onAfterSave(AfterSaveEvent<Object> event) {
        LOG.info("On After Save inserting the record to the Delete and update collection");
        
        boolean isUpdate = event.getDocument().containsKey("_id");
        if (isUpdate) {
            // add your specific update logic here
        } else {
            // add your specific insert logic
        }
    }
@覆盖
AfterSave上的公共无效(AfterSaveEvent事件){
LOG.info(“保存并将记录插入删除和更新集合后打开”);
布尔值isUpdate=event.getDocument().containsKey(“_id”);
如果(isUpdate){
//在此处添加特定的更新逻辑
}否则{
//添加特定的插入逻辑
}
}

您可以从事件中获取creationTime和lastUpdate。如果双方相等,那就是一次拯救

@覆盖
AfterSave上的公共无效(AfterSaveEvent事件){
日期creationTime=event.getDocument().getDate(“creationTime”);
Date lastUpdated=event.getDocument().getDate(“lastUpdated”);
if(creationTime.equals(LastUpdate)){
//拯救
}否则{
//更新
}
}