我未能找到任何关于此的讨论。特别是,我想知道:
List<String>
到自定义课程? (我猜是的。)@IgnoreLoad
或@AlsoLoad
等注释来忽略旧数据类型中的条目? (或者更一般地说,在移动中将旧条目迁移到新数据类型?)这是针对具有不同名称的字段记录的,但我担心如果名称保持不变,这是不可能的。null
?替代解决方案是重新加载/保存所有旧条目并使用不同的字段名称,但我对上面列出的问题特别感兴趣。
答案 0 :(得分:1)
当然可以。但是您的现有数据将无法访问。由于Objectify序列化了String列表(或任何其他Serializable
类的列表),因此数据存储区中的实际数据类型将保留为字符串。
正如您所说,这可能有不同的名称。我不知道如何使用相同的值来实现它,因为所有序列化的东西都是黑盒子的。 考虑它...... 替代解决方案:为什么不将字段类型更改为String,进行转换并将数据类型更改为预期的数据类型?你必须模仿Objectify的序列化风格,但这应该是可行的。(必须重新考虑一下,见@stickfigure评论)
是和否。是的,在您的情况下,数据是一个字符串,将保持字符串。但是,如果您在BQ中使用嵌套模式,那么由于模式更改,这将无效。
不。当您的类的所有实体在特定字段中都为null时,它也将在数据存储区查看器中消失。
答案 1 :(得分:1)
Objectify的文档包含有关模式迁移的部分:
https://github.com/objectify/objectify/wiki/SchemaMigration
使用提供的原语(@ OnLoad,@ OnSave,@ AlsoLoad,@ IgnoreSave等)几乎可以进行任何类型的迁移。这对你想要做出的改变非常具体。概念上最简单的方法是创建一个具有不同名称和新类型的新字段,然后使用@OnLoad方法导入数据。如果要重新命名该字段,可以在第二遍中执行此操作。
更复杂的是以“原始”形式导入数据(比如,将字段的类型更改为Object),然后使用@OnLoad将其转换为适当的位置。这可能很棘手,除非你真的知道你在做什么,否则可能不是一个好主意。
请记住,如果您有一个繁忙的系统,当您切换版本时,旧版本和新版本都在服务的时间非常短。因此,为了避免数据丢失,您的系统需要通过旧版本和新版本都理解这两种模式的状态。