Java Google应用程序引擎-永久类的更改包

Java Google应用程序引擎-永久类的更改包,java,google-app-engine,gwt,google-cloud-datastore,Java,Google App Engine,Gwt,Google Cloud Datastore,我的GWT应用程序部署在Google app Engine for Java上。我在app engine数据存储中保留了一个类的实例。现在我想将该类移到另一个包中,但这会导致反序列化现有对象时出现问题 那么,有没有办法将类移动到一个新的包中?如果可以帮助我实现目标,我不介意更新现有对象 谢谢 这就是我将.package.Clazz移动到新的.package.Clazz的方式。基本思想是通过第三个“临时”类(本例中为TempClazz)进行迁移: 创建新类my.package.TempClazz

我的GWT应用程序部署在Google app Engine for Java上。我在app engine数据存储中保留了一个类的实例。现在我想将该类移到另一个包中,但这会导致反序列化现有对象时出现问题

那么,有没有办法将类移动到一个新的包中?如果可以帮助我实现目标,我不介意更新现有对象


谢谢

这就是我将.package.Clazz移动到新的.package.Clazz的方式。基本思想是通过第三个“临时”类(本例中为TempClazz)进行迁移:

  • 创建新类my.package.TempClazz(不要简单地重命名Clazz)

  • 创建一个helper方法,该方法将从数据存储中读取所有现有的Clazz实体,然后将数据复制到新的TempClazz实例中,并将TempClazz实体存储在数据存储中

  • 现在部署到GAE并运行helper方法将Clazz实体复制到TempClazz实体

  • 如果这有效的话。删除Clazz实体

  • 接下来,基本上重复这个过程,只是这次您实际上将my.package.Clazz重构为新的包my.new.package.Clazz。因此,此时您将有两个类:my.package.TempClazz和my.new.package.Clazz

  • 剩下要做的就是再次从数据存储中读取TempClazz,并将每个TempClazz复制到一个Clazz实体中


相当复杂。也许有人知道更简单的方法

为什么不直接复制新包中的定义,并将实体从旧包直接复制到新包中?@Nick,你试过了吗?如果你的建议行得通,我不明白为什么OP在使用新类反序列化现有实体时会遇到问题。文档声明实体键是从类的简单名称派生的,因此我认为尝试持久化/检索具有相同类名的不同实体是一件麻烦事。我正在对此做更多的调查,并将返回结果。我发现在某些情况下我在反序列化方面有问题,而在其他情况下我没有。例如,我有一个持久的ClassA,它有一个ClassB类型的持久字段,还有一个ClassC类型的持久字段。如果我从com.dfb.client.ClassC->com.dfb.shared.ClassC移动类C,我会得到一个反序列化错误,说“com.dfb.client.ClassC”找不到(或类似的东西)。让我做彻底的分析,并报告确切的结果。谢谢你的帮助。反序列化有什么问题?Stacktrace求你了!