Spring Data MongoDB继承的默认类型

时间:2017-08-02 11:28:33

标签: spring-data-mongodb

我的模型包含以下示例:

class Aggregate {
  private SomeClassWithFields property;
}

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

class Aggregate {
  private AbstractBaseClass property;
}

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

如果没有_class属性,有没有办法告诉Spring Data MongoDB使用SomeClassWithFields作为AbstractBaseClass的默认实现?

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

1 个答案:

答案 0 :(得分:0)

我使用AbstractMongoEventListener

解决了这个问题

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

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