java - 使用 Objectify4 持久化 map

标签 java google-app-engine objectify

假设我已经让 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 一起使用,但有一些注意事项:

  1. 您不能使用“.”键名称中的字符
  2. Object 值根本不会被翻译;它将是数据存储区接受的任何内容。

1 是因为这最终会作为 field.keyname 存储在原始实体中(可能有几层“.”分隔嵌入的字段)。

2 是因为您要删除任何类型信息,因此 Objectify 仅按原样处理对象。就像你直接使用低级API一样;您只能存储基元或基元集合。没有数组,当然也没有 map 。集合总是以列表的形式返回。无论存储的大小如何,数字总是以 Long 形式返回。还有一些其他奇怪的行为。

如果您确实想要这种行为,您可以创建一个自定义 TranslatorFactory,它将在运行时内省(introspection)类型并执行您想要的任何操作。然而,这是相当先进的,需要对现有的翻译器进行一些研究。我们可以帮助您 Google Group ; stackoverflow 可能不适合进行此讨论。

关于java - 使用 Objectify4 持久化 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12579894/

相关文章:

java - CXF/JAXB 代码优先服务 : modify XMLSchemaType of inputs

python - 属性错误 : 'list' object has no attribut 'has_key' in App Engine

google-app-engine - 在没有谷歌应用的情况下将域连接到谷歌应用引擎

java - 在 Json : What exactly is a "direct self-reference"

android - 在 Google Cloud Endpoints(App Engine 后端)中执行 "get"并在 Android 应用程序上进行 objectify 时出现空指针异常

java - 谷歌应用引擎中的排序结果

java - Java 小程序可以在客户端计算机上创建新文件夹吗?

java - 通过 Unicode 字符或其他方式在 Android TextView 中显示情感图标

java - 仅当neo4j中不存在节点时如何创建新节点

google-chrome - 这个查询字符串参数是什么 : _sm_au_