当条目从MongoDb中删除时,不会触发AbstractMongoEventListener中的AfterDeleteE



我有一个扩展AbstractMongoEventListener并覆盖onAfterSaveonAfterDelete的类。

onAfterDelete不触发。onAfterSave工作良好。是否需要为它做一个不同的配置?

public class ClassX extends AbstractMongoEventListener<DomainClass> {
@Override
public void onAfterSave(AfterSaveEvent<DomainClass> event) {
//dosomething
}
@Override
public void onAfterDelete(AfterDeleteEvent<DomainClass> event) {
//dosomething
}
}

我已经检查了数据库和数据被正确删除,但onAfterDelete仍然没有被调用。

有什么问题吗?

存储库:

public interface DomainClassRepository extends MongoRepository<DomainClass, String> {
}

我正在调用DomainClassRepository.delete(instanceOfDomainClass)方法来删除数据库中的条目。

简短回答:

Mongo事件只能用类型化查询触发。

我试过spring-data-mongodb-2.2.8版本,它可以正确处理DomainClassRepository.delete(instanceOfDomainClass)DomainClassRepository.deleteById(idOfDomainClass)

方法onAfterDelete不能在DomainClassRepository.deleteAll()被调用时被触发,因为它是无类型的。

长篇大论(Research):

检查AbstractMongoEventListener中的onApplicationEvent方法。它包含以下代码块:

if (event instanceof AbstractDeleteEvent) {
Class<?> eventDomainType = ((AbstractDeleteEvent) event).getType();
if (eventDomainType != null && domainClass.isAssignableFrom(eventDomainType)) {
if (event instanceof BeforeDeleteEvent) {
onBeforeDelete((BeforeDeleteEvent<E>) event);
}
if (event instanceof AfterDeleteEvent) {
onAfterDelete((AfterDeleteEvent<E>) event);
}
}
return;
}

检查org.springframework.data.mongodb.core.mapping.event包下的AbstractDeleteEvent。构造函数允许有可空类型:

/**
* Creates a new {@link AbstractDeleteEvent} for the given {@link Document} and type.
*
* @param document must not be {@literal null}.
* @param type may be {@literal null}.
* @param collectionName must not be {@literal null}.
* @since 1.8
*/
public AbstractDeleteEvent(Document document, @Nullable Class<T> type, String collectionName) {
super(document, document, collectionName);
this.type = type;
}

相关内容

  • 没有找到相关文章

最新更新