Объективировать встроенные карты не удается получить - PullRequest
1 голос
/ 01 февраля 2012

Я использую Objectify в качестве слоя доступа к данным в моем размещенном приложении GoogleAppEngine.

Проблема возникает, когда я пытаюсь сохранить карту. Мой боб выглядит так:

@Entity
@Cached
class MyBean{
    @Id 
    private Long id;
    @Embedded
    Map<String, String> parameters = new HashMap<String, String>();

    public MyBean(){}

    //getters and setters below
}

Прежде всего, обратите внимание, что «параметры» карты не являются частными, она выдает исключение JRE. При сохранении карты все идет хорошо. При получении его из хранилища данных происходит сбой.

Мой обходной путь - использовать аннотацию @Serialized. Это всего лишь обходной путь, поскольку я хочу использовать функцию expando хранилища данных GAE.

В соответствии с объективировать документ Я делаю правильные операции.

Сведения об исключении:

Вызвано: java.lang.NullPointerException at com.googlecode.objectify.impl.Transmog.loadSingleValue (Transmog.java:364) в com.googlecode.objectify.impl.load.EmbeddedMapSetter.safeSet (EmbeddedMapSetter.java:65) в com.googlecode.objectify.impl.load.CollisionDetectingSetter.set (CollisionDetectingSetter.java:37) в com.googlecode.objectify.impl.Transmog.loadSingleValue (Transmog.java:359) на com.googlecode.objectify.impl.Transmog.load (Transmog.java:340) на com.googlecode.objectify.impl.ConcreteEntityMetadata.toObject (ConcreteEntityMetadata.java:203) в com.googlecode.objectify.impl.QueryImpl $ ToObjectIterator.translate (QueryImpl.java:668) в com.googlecode.objectify.impl.QueryImpl $ ToObjectIterator.translate (QueryImpl.java:657) в com.googlecode.objectify.util.TranslatingIterator.next (TranslatingIterator.java:35)

Ответы [ 2 ]

4 голосов
/ 07 февраля 2012

Встроенные карты плохо поддерживаются в Objectify3 и не должны были публично анонсироваться.Раздел @Embedded Map был удален из документации Objectify3.

Objectify4 широко поддерживает карты, включая следующие карты в стиле эксплоо:

  • Карта (или любой примитив)
  • Карта (ключевые ссылки)
  • Карта (встроенные классы

Кроме того, существует аннотация @Mapify, позволяющая взять обычную коллекцию объектов, выбрать одно свойство изв качестве ключа, и сохраните его как карту.

К сожалению, документация Objectify4 в настоящее время не готова. Однако исходный код активно используется несколькими сторонами. Если вы чувствуете смелость, соберите из ствола.

0 голосов
/ 07 февраля 2012

Я также рекомендую использовать Objectify 4 - я обновил свое приложение и нашел его довольно простым.Я очень предпочитаю поддержку полей типа Map, в частности.

Чтобы ответить на этот вопрос, вы никогда не должны помещать @Embedded в массив, содержащий только примитивы.Поэтому вам не нужно указывать @Embedded на карте, потому что строка является примитивной в хранилище данных Google App Engine.

...