java - Spring AbstractMongoEventListener 不触发

标签 java spring mongodb event-listener dbref

上下文:Java8 应用程序,Spring MongoDB 1.9.1

我有一个包含 A 实体的集合,另一个包含 B 实体的集合。在我的域模型中,实体 A 有一个 B 集合作为 DBRef,如下所示

class A {
    @DBRef
    List<B> myBs;
}

此外,我还注册了两个 AbstractMongoEventListener,一个用于 A,另一个用于 B。如果我直接通过 MongoTemplate.findById() 获取 A 或 B 类型的文档,则 onAfterConvert() 方法会被触发。但是,如果我只是获取 A,我希望 A 的 DBRef'ed 列表中的每个项目 B 也会触发 onAfterConvert 方法。实际上,事实并非如此。

我猜测这按设计工作,但另一方面,我不明白为什么 onAfterConvert 不适用于从数据库加载的任何实体/文档。

长话短说,在加载 A 后,我需要对 B 的所有项目进行一些后期处理。有人对此有一个优雅的解决方案吗?

最佳答案

不知道,是否有更好的方法来解决这个问题,但这对我有用:

在扩展的DefaultDbRefResolver中覆盖resolveDbRef()方法,并在创建bean时将其传递给您自己的MappingMongoConverter。

欢迎其他答案/建议

关于java - Spring AbstractMongoEventListener 不触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36656297/

相关文章:

spring - 将jooq记录数据映射到多个pojo

spring - GeoPoint 与 Spring Data ElasticSearch 给出错误 : QueryParsingException[field [location] is not a geo_point field]

javascript - 在 Mongo 中重新加入拆分 MapReduce 数组

java - 身份验证请求失败 : Bad credentials [LDAP: error code 49 - data 52e, v1db1]

java - 在 Netbeans Java 项目中将 Windows 外观设置为默认值

java - 在 Sandbox 上使用 Paypal Express Checkout,安全 header 无效,API 凭证中没有错误

javascript - MongoDB 索引 : String vs Int

java - 如何为 JAR 和调试正确引用资源文件?

mysql - (Spring) 使用数据库表执行授权

c# - 将 SetFields 与 MongoDB C# 驱动程序 2.0 一起使用