MongoDB Java Драйвер @BsonDiscriminator не работает - PullRequest
0 голосов
/ 24 марта 2020

Я пытаюсь записать и прочитать сложный объект в 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 не работает

1 Ответ

0 голосов
/ 26 марта 2020

Тег @BsonDiscriminator работает для абстрактных классов, начиная со следующей версии MongoDB Java Driver: org.mongodb:mongodb-driver:3.6.0

После того, как я обновился до этой версии, все начало работать как задумано.

...