在Google App Engine中重构包含JDO @PersistenceCapable类的包

时间:2010-07-20 08:05:06

标签: java google-app-engine jdo

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

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

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

2 个答案:

答案 0 :(得分:1)

Object Fields and Entity Properties下的官方文档中记录了一些这方面的内容。以下是重构规则的结果:

  • 向您的类添加新的可空字段将导致所有现有实体对该字段都为null。
  • 添加新的集合或数组字段将导致所有现有实体具有该字段的空集合或数组。
  • 当您尝试加载现有实体时,添加新的非可空字段将导致抛出异常。
  • 删除字段不会导致错误;现有实体将保留旧字段,直到它们被加载并再次保存。
  • 更改字段类型将导致App Engine尝试将旧值强制转换为新数据类型;如果演员表无效,将抛出异常。数字类型是一个例外;在这种情况下,转换值而不是转换,溢出不会导致异常。

如果您需要进行如上所述的简单修改无法实现的重构,您可能希望使用App Engine mapreduce library

答案 1 :(得分:1)

我假设情况是这样的:

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

AFAIK,appengine中的JDO工具只使用类名。这是因为当我查看管理控制台时,数据查看器和数据存储区统计信息仅通过类名称引用我的实体。因此,如果您保持您的类名相同并且只更改包名称,那么您的实体应该没问题。