假设我已经让 Objectify4 在我的项目中工作(尽管我仍在努力使其工作),是否可以使用这样的 Map 字段持久保存一个实体:
class Foo {
Map<String, Object> map;
public Foo() {}
public Foo(Map map) {
this.map = map;
}
}
基本思想是能够存储/保留一个“通用”字段,该字段可以是:
- 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 实现?或应用程序引擎?
最佳答案
这将按原样与 Objectify4 一起使用,但有一些注意事项:
- 您不能使用“.”键名称中的字符
Object
值根本不会被翻译;它将是数据存储区接受的任何内容。
1 是因为这最终会作为 field.keyname
存储在原始实体中(可能有几层“.”分隔嵌入的字段)。
2 是因为您要删除任何类型信息,因此 Objectify 仅按原样处理对象。就像你直接使用低级API一样;您只能存储基元或基元集合。没有数组,当然也没有 map 。集合总是以列表的形式返回。无论存储的大小如何,数字总是以 Long 形式返回。还有一些其他奇怪的行为。
如果您确实想要这种行为,您可以创建一个自定义 TranslatorFactory,它将在运行时内省(introspection)类型并执行您想要的任何操作。然而,这是相当先进的,需要对现有的翻译器进行一些研究。我们可以帮助您 Google Group ; stackoverflow 可能不适合进行此讨论。
关于java - 使用 Objectify4 持久化 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12579894/