我的问题很明显:
- 我有一个名为的类
TaskDescription
,它对应于 App Engine Datastore 中的一种(表)。然后我将其重命名为TaskContent
,所有存储的数据现在似乎都丢失了(因为所谓的类名kind
是存储数据路径的一部分)。 - 我意识到每次重命名任何实体类中的单个字段时都会出现几乎相同的问题。
这个世界上没有什么是完美的,我怀疑是否有可能从头开始创建所有绝对正确的实体,之后再也不改变它们。
那么,如何处理这个问题呢?
我的问题很明显:
TaskDescription
,它对应于 App Engine Datastore 中的一种(表)。然后我将其重命名为TaskContent
,所有存储的数据现在似乎都丢失了(因为所谓的类名kind
是存储数据路径的一部分)。这个世界上没有什么是完美的,我怀疑是否有可能从头开始创建所有绝对正确的实体,之后再也不改变它们。
那么,如何处理这个问题呢?
两种方式:
保持实体不变并更改映射:在 objectify 中,您可以将实体设置为类名映射:例如 @Entity(name="EntityName")。
更改数据存储中的实体:由于数据存储是无模式的,这不能通过简单的命令来完成。对于实体名称更改,您需要创建一个新实体,复制所有属性并删除旧实体。人们通常使用MapReduce 作业来执行数据存储维护。这是java 的 MapReduce。
对于字段名称更改,objectify 明确支持迁移模式(没有模式,但他们仍然这样称呼它)。