Java 在googleappengine中重构包含JDO@PersistenceCapable类的包

Java 在googleappengine中重构包含JDO@PersistenceCapable类的包,java,google-app-engine,jdo,Java,Google App Engine,Jdo,我在需要重构的包中有一组支持JDO持久性的类 我知道如果更改类名,则需要更新“BigTables”对象。但是,如果我更改java对象所属的包,这是否意味着“BigTables”中的数据对象需要以某种方式更新 ie com.example.test.Person->com.example.blah.Person这其中的一部分记录在下面的官方文档中。以下是重构规则的结果: 向类中添加新的可为null的字段将导致该字段的所有现有实体都为null 添加新的集合或数组字段将导致所有现有实体的集合或数组为

我在需要重构的包中有一组支持JDO持久性的类

我知道如果更改类名,则需要更新“BigTables”对象。但是,如果我更改java对象所属的包,这是否意味着“BigTables”中的数据对象需要以某种方式更新


ie com.example.test.Person->com.example.blah.Person

这其中的一部分记录在下面的官方文档中。以下是重构规则的结果:

  • 向类中添加新的可为null的字段将导致该字段的所有现有实体都为null
  • 添加新的集合或数组字段将导致所有现有实体的集合或数组为空
  • 添加新的不可为null的字段将导致在尝试加载现有实体时引发异常
  • 删除字段不会导致错误;现有实体将保留旧字段,直到再次加载和保存它们
  • 更改字段类型将导致应用程序引擎尝试将旧值转换为新数据类型;如果强制转换无效,将引发异常。一个例外是数字类型;在这种情况下,值被转换而不是强制转换,溢出不会导致异常

如果您需要进行重构,而这些重构无法通过上述简单的修改来实现,那么您可能需要使用。

我假设情况如下:

我有一个类“com.peter.Foo”,我一直在使用JDO持久化它,我想将它更改为“com.nick.Foo”,我现有的所有Foo实体都需要更新吗?换句话说,JDO在将java类映射到数据存储类型时是否使用包名


另外,appengine中的JDO工具只使用类名。之所以这样说,是因为当我在管理控制台中查看时,dataviewer和datastore统计数据仅通过类名引用我的实体。因此,如果您保持类名不变,只更改包名,则实体应该可以。

我认为OP问题的关键在于更改类的包时会发生什么。谢谢。如果其他人有同样的问题,我会测试并报告。如果管理控制台只显示类名,那么您是正确的:JDO只需要对其进行操作。更改包不会影响反序列化。