在我的项目有一个结构,如下所示:更新元件不保留其类型
class User {
private List<MapObject> mapObjects;
}
class MapObject {
... some fields...
}
class SubMapObject {
... some additional fields
}
最初,用户类被填充数据(以及还包括SubMapObject类的实例)从模板,并通过MongoTemplate从Spring集成存储在MongoDB中,像这样:
mongoOps.insert(u);
而且在MapObjects的领域每个项目的信息被保留,也是的_class它是什么。 (在案件时,它的子类)
然后,它涉及到一个地步,我们需要更新用户的MapObjects的字段中的一个元素。我们这样做是这样的:
mongoOps.updateFirst(
query(where("_id").is(userObjectId).and("mapObjects._id")
.is(mo.get_id())), update("mapObjects.$", mo),
User.class);
凡月是SubMapObject例如。
每当有任何子类(MapObject)实例被传递时,关于该对象的MongoDB记录中的哪个类(_class)字段的信息都会丢失,它将被视为其父对象 - MapObject。因此,我们有以下的问题:)
1)我们从哪里做错了,以及如何保持此对象的类的信息? 2)此外,我们想知道更新整个mapObjects字段是否比仅更新其中的特定元素更快(因为它必须在这种情况下迭代才能找到它)。很可能一个用户在其mapObjects列表中会有300-400个条目。
看到一个自定义推送实现了同样的问题。什么奇怪的是,该对象的字段使用自定义转换器,但对象本身不保留_class场映射。 –