0

我正在尝试我们更改实体中的字段名称的情况。例如,我们有这样的东西

class Person {
   String name; //The original declaration was "String fullName"    
}

根据 objectify 你必须使用 annonation @AutoLoad("")。这没关系,因为 Google Datastore 实际上并没有删除数据,但它创建了一个新字段,所以这个注释就像旧字段和新字段之间的映射。当您阅读整个表格时没有问题。

当您对查询应用过滤器时会出现问题(假设您使用旧名称创建了 5 个对象,使用新名称创建了 5 个对象)。查询的结果取决于您使用的是旧变量名还是新变量名(仅返回 5,但从不返回 10)。它不会同时获取它们并映射它们。对这个问题有什么建议吗?我希望我清楚地解释了它。

提前致谢

4

3 回答 3

1

最简单直接的解决方案。使用注释“AutoLoad()”获取所有数据。然后再次存储它们。这样,它们将被保存为新字段。旧的不再存在,或者至少它不再包含任何数据。这就像将数据从旧名称迁移到新名称。有人有更好的建议吗?

于 2011-03-22T16:20:56.850 回答
1

如果您更改了字段的名称,则需要加载并重新放置所有数据(此处使用 mapreduce API 是一种选择)。没有什么神奇的方法可以解决这个问题 - 您存储的数据在磁盘上有两个不同的名称。

于 2011-03-23T00:46:09.013 回答
0

您可以使用@OldName http://www.mail-archive.com/google-appengine-java@googlegroups.com/msg05586.html

于 2011-03-22T16:43:53.153 回答