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.
我在这里做错了吗?是否不支持字符串的嵌入列表?
答案 0 :(得分:2)
通过objectify-appengine谷歌小组学到:简单类型列表不应标记为@Embedded。没有这种符号,它们将被坚持下去。 @Embedded仅适用于复杂的用户类型。文档将更新,以明确这一点。