Я пытаюсь записать и прочитать сложный объект в MongoDB, используя Java Пн go Драйвер.
Объект включает в себя, среди прочего, списки объектов различного, но связанного типа, которые я покрываю абстрактные классы в модели данных, например:
public class Datatypes{
public List<DatatypeDefinitionTag> datatypeDefinitions;
}
... который заполняется этими объектами:
public class DatatypeDefinitionInteger extends DatatypeDefinitionTag {
[...]
}
public class DatatypeDefinitionString extends DatatypeDefinitionTag {
[...]
}
Теперь, согласно документации (http://mongodb.github.io/mongo-java-driver/3.9/bson/pojos/#properties -with-abstract-or-interface-types ) это должно работать, аннотируя абстрактный класс следующим образом:
@BsonDiscriminator
public abstract class DatatypeDefinitionTag {
[...]
}
... однако, если я это делаю, я все равно получаю ошибку пытаясь прочитать данные из MongoDB и непосредственно проверяя MongoDB, я вижу, что все записи в datatypeDefinitions
имеют _t:reqIF.reqIF_dataStructure.abstracts.tags.DatatypeDefinitionTag
Я ожидал, что дискриминатор назначит следующие значения вместо этого, основываясь на сохраненный объект:
_t:reqIF.reqIF_dataStructure.coreContent.reqIF_content.datatypes.datatypeDefinitions.DatatypeDefinitionString
_t:reqIF.reqIF_dataStructure.coreContent.reqIF_content.datatypes.datatypeDefinitions.DatatypeDefinitionInteger
Есть идеи, почему это происходит? По сути, я просто ищу Java эквивалент того, как это будет работать с драйвером. Net:
[BsonKnownTypes(typeof(DatatypeDefinitionString), typeof(DatatypeDefinitionInteger))]
public class DatatypeDefinitionTag
РЕДАКТИРОВАТЬ:
, который я сейчас создал минимальный c тестовый проект, который воспроизводит это поведение (запустите MongoDB_ReaderTest).
MongoDB Java Драйвер @BsonDiscriminator не работает