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 方法来完成。
我的模型包含以下示例:
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 方法来完成。