使用Objectify4持久化地图

时间:2012-09-25 09:21:28

标签: java google-app-engine objectify

假设我已经使Objectify4与我的项目一起工作(虽然我仍在努力使它工作)是否可以像这样坚持一个带有Map字段的Entity:

class Foo {
  Map<String, Object> map; 
  public Foo() {}
  public Foo(Map map) {
   this.map = map;
  }
}

基本思想是能够存储/保持&#34;泛型&#34;字段可以是

  • java.lang.String中
  • java.lang.Number中
  • java.lang.Boolean的
  • 的java.util.List
  • java.util.Map

例如我可以存储这个:

map.put("uid:sarah:fname", "Sarah");
persist(new Foo(map));

或者

map.put("uid:sarah:age", 25);
persist(new Foo(map));

Objectify甚至可以实现这一点吗?还是App Engine?

1 个答案:

答案 0 :(得分:1)

这将与Objectify4一样,有几点需要注意:

  1. 你不能使用'。'键名中的字符
  2. Object值根本不会被翻译;它将是数据存储所接受的任何内容。
  3. 1是因为这最终被存储在原始实体中field.keyname(可能有几层“。”分隔嵌入字段)。

    2是因为您正在删除任何类型信息,因此Objectify只是将Object视为原样。就像你直接使用低级api一样;您只能存储基元或基元集合。没有数组,当然也没有地图。收藏总是以列表的形式返回。数字总是以长的形式返回,无论它们存储的大小如何。还有其他一些古怪的行为。

    如果您真的想要这种行为,可以创建一个自定义的TranslatorFactory,它将在运行时内省类型并执行您想要的任何操作。然而,这是非常先进的,需要对现有翻译人员进行一些研究。我们可以帮助您Google Group; stackoverflow可能不是讨论的正确位置。

相关问题