在AbstractMongoEventListener中获取已删除的对象

问题描述 投票:1回答:1

我想从MongoDB中删除对象时运行一些逻辑。我正在使用SpringData Mongo。

我正在使用AbstractMongoEventListener,因为可以通过多种方式从集合中删除对象,而我覆盖了

public void onBeforeDelete(BeforeDeleteEvent<Object> event) 

方法。但是事件对象中没有任何方法可以返回要删除的对象。

event.getSource()和event.getDocument()返回文档。我怎样才能得到物体。

spring-data spring-data-mongodb
1个回答
0
投票

以某种方式似乎混淆了这一事件。与其他MongoMappingEvent<T>后代不同的是,此后代继承了MongoMappingEvent<Document>AbstractDelteEvent<T>。我无法解释这种差异。

但是由于我在删除文档之前也需要检索文档,因此我使用调试器进行查找,可以使用一些黑手党的未记录的get(“ Key”)链来检索文档ID。

event.getDocument()
     .get("_id", Document.class)      // BSON Document!
     .getList("$in", ObjectId.class)  // ObjectId.class or what ever Type your Id is.

这样,您可以检索文档ID的列表。提取存储库或其他内容,然后使用这些ID来获取文档。


我真的不喜欢使用那些我在文档中找不到的字符串键,因为谁知道什么时候它们会被删除。只要有人提供了一种不太骇人听闻的方法,我就希望删除此答案。

[请注意,此EventHandler完全忽略了Type-Parameter。如果您的实体类型为MyEntity,并且您具有类型为BeforeDeleteEvent<SomethingCompletelyDifferent>的事件侦听器,则仍会获得事件。

© www.soinside.com 2019 - 2024. All rights reserved.