我的模型包含以下示例:
class Aggregate {
private SomeClassWithFields property;
}
现在我决定将继承引入SomeClassWithFields。这导致:
class Aggregate {
private AbstractBaseClass property;
}
该集合已包含大量文档。这些文档在DB中不包含_class属性,因为它们是在继承存在之前存储的。
如果没有_class属性,有没有办法告诉Spring Data MongoDB使用SomeClassWithFields作为AbstractBaseClass的默认实现?
另一种解决方案是使用脚本将_class添加到所有现有文档中,但这需要一些时间,因为我们有很多文档。
答案 0 :(得分:0)
我使用AbstractMongoEventListener
解决了这个问题AbstractMongoEventListener有一个onAfterLoad方法,我用它来设置默认的_class值(如果没有):)在弹出任何从DBObject到我的域模型的映射之前调用此方法,这样就可以了。
请注意,我还需要让spring数据mongodb知道mappingBasePackage,以便它能够在写入之前读取聚合。这可以通过实现PreconfiguredAbstractMongoConfiguration类的getMappingBasePackage方法来完成。