2

我正在使用 GAE Java 构建一个 Web 应用程序。我有一个使用 Long ID(由 appengine 生成)作为其主键的类。

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

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

谢谢

4

2 回答 2

3

实际上,持久化实体的 Key 被认为是不可变的。毫无疑问,更改密钥将等同于更改使用的实例。我建议您将初始对象链接到您创建的父级的子级。

于 2010-02-17T14:08:53.747 回答
0

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

但是,您必须自己管理一致性(如果您的站点没有很高的流量,这可能不会太难),并且父类和子类不会在同一个实体组中(对事务的影响)。

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

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

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

于 2010-03-29T14:28:08.327 回答