Spring 数据 MongoDB 继承的默认类型

Spring Data MongoDB default type for inheritance

我的模型包含以下示例:

class Aggregate {
  private SomeClassWithFields property;
}

现在我决定给SomeClassWithFields引入继承。这导致:

class Aggregate {
  private AbstractBaseClass property;
}

该集合已包含大量文档。这些文档在数据库中不包含 _class 属性,因为它们是在继承存在之前存储的。

有没有办法告诉 Spring Data MongoDB 在没有 _class 属性 的情况下使用 SomeClassWithFields 作为 AbstractBaseClass 的默认实现?

另一个解决方案是使用脚本将 _class 添加到所有现有文档,但这需要一些时间,因为我们有很多文档。

我使用 AbstractMongoEventListener 解决了这个问题

AbstractMongoEventListener 有一个 onAfterLoad 方法,如果 none 存在,我用它来设置默认的 _class 值 :) 在从 DBObject 到我的域模型的任何映射之前调用此方法spring 这样就可以了。

请注意,我还需要让 spring 数据 mongodb 知道 mappingBasePackage,以便它能够在写入聚合之前读取聚合。这可以通过实现 PreconfiguredAbstractMongoConfiguration class 的 getMappingBasePackage 方法来完成。