Перечисляет как ключ карты с DBref с данными весны Монго - PullRequest
0 голосов
/ 18 февраля 2020

Я пытаюсь сохранить и извлечь документы, сопоставленные с классом, в Mongodb, используя mongodb для данных о весне с полем карты.

Вот упрощенная версия моих объектов в java: перечисление:

public enum MyEnum {
   VALUE1, VALUE2
}

И сущность, которую нужно сохранить:

public class Entity {

  @DBRef    
  private Map<MyEnum, MySubEntity> mapField;

  public Entity(Map<MyEnum, MySubEntity> mapField){
      this.mapField = mapField;
  }
}

У меня есть простой репозиторий для сохранения сущностей и их извлечения. После сохранения документ правильно создается в MongoDB.

Проблема возникает, когда я пытаюсь получить ее. Объект Entity создается и возвращается в хранилище, но любая попытка получить доступ или использовать поле mapField завершится неудачно с ошибкой: "java.lang.String cannot be cast to MyEnum" При использовании отладчика java для слежки за извлеченным объектом Entity, поле mapField выглядит иметь в качестве ключей String, а не MyEnum.

Я безуспешно пытался зарегистрировать пользовательский конвертер для этого типа.

У меня вопрос: могу ли я что-либо сделать, чтобы соответствовать своему варианту использования, или моя модель просто не поддерживается Spring data mongodb, и я должен изменить его?

Обновить :

Проблема, похоже, связана с использованием @DBRef на карте. Я пытался без него, и сущность восстановлена ​​правильно. Не уверен, почему это ...

1 Ответ

0 голосов
/ 18 февраля 2020

Вы правы. Ключи в MongoDb должны быть типа String. Вы можете создать конвертер для преобразования ваших ключей в строковый тип перед добавлением в базу данных. Использование метода toString() для вашего ключа может быть решением.

Здесь - хорошее объяснение и, вероятно, ответ на ваш вопрос.

...