Objectify无法保存@Embedded字符串列表

时间:2011-04-20 18:45:50

标签: java google-cloud-datastore objectify

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]

请注意,字符串是通过哈希保存的,它是String

中唯一的非final字段

此代码将失败:

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 个答案:

答案 0 :(得分:2)

通过objectify-appengine谷歌小组学到:简单类型列表不应标记为@Embedded。没有这种符号,它们将被坚持下去。 @Embedded仅适用于复杂的用户类型。文档将更新,以明确这一点。