我正在使用GAE Java构建一个Web应用程序。我有一个使用Long ID(由appengine生成)作为主键的类。需要更新GAE中现有对象的主键Java
我现在想要创建一个新的类,它将是这个原始类的父类(一对多关系),但是子需要有一个“key”类型的主键,而不是我拥有的Long ID现在。
将主键更改为类型“键”而不是现有持久实体长的最佳方式是什么?我应该使用“key”类型的主键创建一个新类,并实例化并坚持从旧的字段值复制字段值的新对象?或者我可以以某种方式更新现有课程?
感谢
我正在使用GAE Java构建一个Web应用程序。我有一个使用Long ID(由appengine生成)作为主键的类。需要更新GAE中现有对象的主键Java
我现在想要创建一个新的类,它将是这个原始类的父类(一对多关系),但是子需要有一个“key”类型的主键,而不是我拥有的Long ID现在。
将主键更改为类型“键”而不是现有持久实体长的最佳方式是什么?我应该使用“key”类型的主键创建一个新类,并实例化并坚持从旧的字段值复制字段值的新对象?或者我可以以某种方式更新现有课程?
感谢
事实上,坚持实体的键被认为是不可变的。毫无疑问,更改密钥将相当于更改使用的实例。我建议你将你的初始对象与你创建的父对象的孩子联系起来。
您可以将现有的长ID存储在父类的列表中:这将创建必要的一对多父子关系。
虽然您可能需要自己管理一致性(如果您的网站没有很高的流量,这可能不会太难),并且父类和子类不会位于同一个实体组中(对交易的影响) 。
更改密钥意味着更改实体本身(以及它的实体组)。
最终,适用于您的解决方案将取决于您的问题的具体情况。例如,是否已有很多现有数据?这是一个实时应用程序(即它是否已被使用)?
另一种解决方案可能是将您的应用程序迁移到不同的(更适合的)数据模型,并按帐户逐个帐户(通过锁定帐户一段时间)。通过这种方式,只有少数人会受到更改的影响(如果他们碰巧在您迁移其帐户时访问应用程序),而不是整个应用程序被关闭。