Поддержка MongoJack @javax.persistance.Id не работает

Я использую MongoJack (2.0.0) для сериализации/десериализации объектов из MongoDB. Согласно http://mongojack.org/index.html, MongoJack должен поддерживать @javax.persistance.Id.

У меня есть аннотированная объектная переменная с @Id

@Id
private String id;

Когда я пытаюсь сохранить объект с допустимым идентификатором

jacksonDBCollection.save(myEntity);

Объект сохраняется как новый документ вместо обновления существующего.

Я использую собственный десериализатор, но в моем модуле нет сериализатора:

ObjectMapper objectMapper = new ObjectMapper();

SimpleModule module = new SimpleModule("MyModule", Version.unknownVersion());
module.addDeserializer(MyEntity.class, new MyEntityJsonDeserializer());
objectMapper.registerModule(module);

return objectMapper;

Я отладил некоторый код и вижу, что идентификатор обрабатывается как String вместо ObjectId при вызове jacksonDBCollection.save(myEntity). Похоже, что поддержка @javax.persistance.Id не работает.

Я пытался найти источник, где это поддерживается, но не повезло. Может ли кто-нибудь указать мне источник, где это поддерживается, и/или сообщить мне, что я делаю неправильно?

Ваше здоровье.


person Tuno    schedule 19.06.2014    source источник
comment
Я создал обходной путь с сериализатором.   -  person Tuno    schedule 19.06.2014


Ответы (1)


Когда вы настраиваете свой objectMapper, вы также должны вызывать:

MongoJackModule.configure(objectMapper);

для регистрации MongoAnnotationIntrospector, который обнаруживает и интерпретирует аннотацию @javax.persistance.Id.

person Lukasz Wiktor    schedule 23.06.2014
comment
MongoJackModule является частью пакета org.mongojack.internal, который не отображается в контексте OSGi. Я забыл упомянуть, что использую OSGi, так как это не имеет отношения к этому вопросу. Internal указывает, что его не следует вызывать напрямую. Любая идея, как настроить это по-другому? - person Tuno; 24.06.2014
comment
Блестящий! Я скрипел зубами, почему collection.updateById() не обновлял ни один документ. Это решило проблему. - person Bart; 10.08.2014