Objectify не может сохранить @Embedded List of Strings - PullRequest
2 голосов
/ 20 апреля 2011

Objectify (2.2.3), похоже, не хочет обрабатывать @Embedded списки строк, хотя вся документация говорит, что это должно быть возможно.Строки обрабатываются так, как если бы они были пользовательскими объектами, которые необходимо преобразовать.Минимальный пример:

public class Test {
  @Id public Long id = null;
  @Embedded private List<String> strings = new ArrayList<String>();

  private Test() {}

  public Test(String[] in) {
    for (String s : in) {
      strings.add(s);
  }
}

Экземпляр этого класса сохраняется как:

  Key: 7
  ID/Name: ahpzY2hlZHVsZS13aXRoLXlvdXItZnJpZW5kc3IKCxIEVGVzdBgHDA   
  strings.hash: [0, 0]

Обратите внимание, что строки сохраняются с помощью хэша, поскольку это единственное не финальное поле вСтрока

Этот код не будет работать:

ObjectifyService.register(Test.class);
Test t = new Test(new String[] { "aa", "bb" });
Objectify ofy = ObjectifyService.begin();
ofy.put(t);
Test t2 = ofy.get(Test.class, t.id); //<-- fails with IllegalAccessException: Private fields can not be set on JRE classes.

Я что-то здесь не так делаю?Не поддерживаются ли встроенные списки строк?

1 Ответ

2 голосов
/ 16 мая 2011

Как выяснилось в Google Objectify-appengine group: списки простых типов не должны помечаться @Embedded Они будут сохранены без этой записи. @Embedded только для сложных типов пользователей. Документация будет обновлена, чтобы прояснить ситуацию.

...