是否可以从元数据_property_中解码属性类

Posted

技术标签:

【中文标题】是否可以从元数据_property_中解码属性类【英文标题】:Is it possible to decode property class from metadata _property_ 【发布时间】:2011-10-22 09:47:36 【问题描述】:

当我进行元查询以检索实体属性(列)时,我只检索以下内容:

种类:财产 编号:0 名称:propDate property_representation = INT64

我没有足够的信息将此属性映射到 java.util.Date 类,因为 INT64 可以是 java.lang.Byte、java.lang.Short、java.lang.Integer、java.lang.Long

在 gae 控制台/数据存储查看器中,我看到日期已格式化... 它是从元数据还是从数据中解码的?

有什么想法!?

【问题讨论】:

【参考方案1】:

App Engine 数据存储区是无架构的。您的元数据查询返回有关已编入索引的属性的信息,但对实体中的实际数据一无所知。实际上,您可以拥有具有相同属性名称的不同类型的相同种类的实体,并且如果这些类型具有相同的底层表示,则它们在元数据中将无法区分。您会在数据存储查看器中注意到,视图表中的列(在 RDBMS 意义上不应该被认为是“列”)没有用类型标记。这不仅仅是一个 UI 选择;这是因为该级别的属性名称本身没有类型。

实体中每个属性的实际数据存储类型与实体一起存储在协议缓冲区中。这些不是 Java(或 Python)类型,而是诸如“atom:category”、“georss:point”、“gd:when”等(当然还有更熟悉的“int”、“float”、 “字符串”),并且可以在单个实体的数据存储查看器中显示,因为它们实际上已被反序列化。在 Java 和 Python 代码中,这些由您的应用程序通过数据存储 API 映射到 Java 和 Python 类型。但是存储在数据存储中的数据“是”java.util.Date 是没有意义的;它存储为gd.when,并且可以从与 Python datetime.date 相同的数据存储中读取。

【讨论】:

感谢 Wooble,它证实了我的疑问(因此必须获取该类以了解其所有属性和相应的 java 类!正确吗?)...但是您能解释一下 property_representation 的含义吗,我不知道'不明白它的目标!? 我认为你甚至不能 100% 地从实体本身推断出 Java 类型;例如 gd:when 可以是日期、日期时间或时间。您的应用程序需要您的类定义才能进行翻译。如果我理解正确,property_representation 就是将值存储在索引中的方式;许多数据存储类型映射到相同的表示,因为对于索引,您只需要可排序的内容即可搜索;如果您不关心数据的含义,只关心如何找到它,INT64 就足够了。

以上是关于是否可以从元数据_property_中解码属性类的主要内容,如果未能解决你的问题,请参考以下文章

什么可以从元类实例化

封装与特性(property)

Jmeter工具使用--常用属性及变量

从Python中的类元信息类型提示__init__函数

property属性

修改与删除@property封装的数据属性