2

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.

我在这里做错了吗?不支持嵌入的字符串列表吗?

4

1 回答 1

2

正如通过 objectify-appengine google group 了解到的:不应将简单类型的列表标记为 @Embedded。如果没有该符号,它们将被保留。@Embedded 仅适用于复杂的用户类型。将更新文档以明确这一点。

于 2011-05-16T02:50:11.943 回答