制定Google App引擎实体的属性数据类型

时间:2011-07-20 22:50:01

标签: java google-app-engine reflection

我有这个实体 - 我正在尝试确定其属性的类型 - 在Google App Engine的内部数据类型PREFERRED(而不是Java数据类型)中。 下面的代码显然是简化的。实际上,我知道实体的属性或其他任何相关内容。

final DatastoreService dss = DatastoreServiceFactory.getDatastoreService();
final Query query = new Query("Person");
final PreparedQuery pq = dss.prepare(query);

for (Entity entity : pq.asIterable())
{
    final Object property = entity.getProperty("some_property");
    // Here I want to determine which data type 'property' represents - GAE-wise.
}

在App Engine的Java code中,我找到了一些提示:

DataTypeTranslator
    DataTypeTranslator.typeMap (internal private member)
Property.Meaning.GD_PHONENUMBER

我无法将这些链接到我需要的东西 - 某种反思。

我希望我能做到这样的事情:

entity.getPropertyType("some_property");

有谁知道更好吗?

DataTypeTranslator source code here

编辑#1: << INGORE这一个。是我把这些后缀(我对文档感到困惑)。
这是我发现的更重要的信息 当我指向一个实体(我刚刚从Datastore获取的实体)时,我在Eclipse的工具提示迷你窗口中得到它。
数据存储区似乎将它(此有效负载)作为原始文本发送,这很好,也许我将不得不解析它(但是,我如何从代码LOL中获取它。) 注意这里的类型,简单易懂 这是:

<Entity [Bird(9)]:
    Int64Type:44rmna4kc2g23i9brlupps74ir#Int64Type = 1234567890
    String:igt7qvk9p89nc3gjqn9s3jq69c = 7tns1l48vpttq5ff47i3jlq3f9
    PhoneNumber:auih50aecl574ud23v9h4rfvt1#PhoneNumberType = 03-6491234
    Date:k1qstkn9np0mpb6fp41cj6i3am = Wed Jul 20 23:03:13 UTC 2011
>

例如,名为String:igt7qvk9p89nc3gjqn9s3jq69c的属性的值为7tns1l48vpttq5ff47i3jlq3f9,并且它不会告诉其类型。还有财产Date:k1qstkn9np0mpb6fp41cj6i3am 名为Int64Type:44rmna4kc2g23i9brlupps74ir的属性值为“1234567890”,此处严格提及数据类型为“Int64Type”。

1 个答案:

答案 0 :(得分:0)

我也在寻找它。

这有点像黑客,但至少我的输出包括类型(不需要秘密的解码器环)。但我的代码略有不同:

Query allusersentityquery = new Query();
allusersentityquery.setAncestor(userKey);

for (final Entity entity : datastore.prepare(allusersentityquery).asIterable()) {
    Map<String, Object> properties = entity.getProperties();
    String[] propertyNames = properties.keySet().toArray(
        new String[properties.size()]);

    for(final String propertyName : propertyNames) {
      // propertyNames string contains
      // "com.google.appengine.api.datastore.PostalAddress" if it is a Postal Address
    }
}

似乎没有关于确定属性类型here的文档。