2010-07-24 57 views

回答

5

如果您向模型添加新属性,那么当您加载它们时,如果您提供了默认值,则现有实体将具有默认值。尽管如此,他们不会在查询中显示该值,直到您获取并再次存储它们。

5

您将不得不将该属性逐个添加到所有现有实体。

您没有提及您正在使用哪种语言或API。程序的确切细节会因您的情况而有所不同。

通常,最安全的方法是使用不验证实体的API加载每个实体。在python中,你可以使用Expando模型。在Java中,您可以使用低级数据存储区API。 (使用JDO或JPA尝试此操作可能不起作用)您现在需要遍历所有现有实体。 (尝试使用新的Mapper API来做到这一点,而不是大惊小怪)。对于每个实体,您将加载它,添加新的属性,然后将其保存回数据存储。现在,您可以安全地返回到验证实体的框架,如JDO或非expando模型。

此方法适用于修改属性的类型或删除属性。

+0

我很满意提供默认值(正如尼克约翰逊的回答所暗示的)。您的解决方案是否解决了比这种情况更复杂的问题,例如新属性的价值取决于每个实体实例的具体情况? – Joey 2010-07-26 08:06:05

+0

@Joey尼克的解决方案更容易为你的情况。更改属性的类型或删除属性将需要更复杂的方法。 – 2010-08-01 16:38:42