2010-02-02 26 views
2

我正在使用GAE Java构建一个Web应用程序。我有一个使用Long ID(由appengine生成)作为主键的类。需要更新GAE中现有对象的主键Java

我现在想要创建一个新的类,它将是这个原始类的父类(一对多关系),但是子需要有一个“key”类型的主键,而不是我拥有的Long ID现在。

将主键更改为类型“键”而不是现有持久实体长的最佳方式是什么?我应该使用“key”类型的主键创建一个新类,并实例化并坚持从旧的字段值复制字段值的新对象?或者我可以以某种方式更新现有课程?

感谢

回答

3

事实上,坚持实体的键被认为是不可变的。毫无疑问,更改密钥相当于更改使用的实例。我建议你将你的初始对象与你创建的父对象的孩子联系起来。

0

您可以将现有的长ID存储在父类的列表中:这将创建必要的一对多父子关系。

虽然您可能需要自己管理一致性(如果您的网站没有很高的流量,这可能不会太难),并且父类和子类不会位于同一个实体组中(对交易的影响) 。

更改密钥意味着更改实体本身(以及它的实体组)。

最终,适用于您的解决方案将取决于您的问题的具体情况。例如,是否已有很多现有数据?这是一个实时应用程序(即它是否已被使用)?

另一种解决方案可能是将您的应用程序迁移到不同的(更适合的)数据模型,并按帐户逐个帐户(通过锁定帐户一段时间)。通过这种方式,只有少数人会受到更改的影响(如果他们碰巧在您迁移其帐户时访问应用程序),而不是整个应用程序被关闭。