【问题标题】:Schema migration of ids and n to m relationships in objectifyobjectify 中 ids 和 n 到 m 关系的模式迁移
【发布时间】:2016-03-18 08:41:04
【问题描述】:

如果有一个用户实体之前有一个字符串 id。我想迁移到一个看起来很简单的 Long id:

public class UserEntity  {
   /*@Id*/
   @Index String oldId;
   @Id Long newId;
  /* other indexed fields I use for loading the entity */

  private List<Ref<ReferencedEntity>> collections;
}

public class ReferencedEntity {
   private List<Ref<User>> owners;
}

由于我通过不同的字段加载用户,我可以检查用户是否有一个 null newId,如果是 null,则将旧的保存回来,以便自动生成器在 newId 字段中设置一个新的 Id。

现在的问题是我与其他实体的 n 到 m 关系。我应该如何迁移那些?我在两边都有一个Ref,所以我想我可以在用户实体端加载引用并用新的 ID 替换另一端。

一般的问题是如果一方需要一个新的id,如何迁移n到m的关系?

【问题讨论】:

    标签: java google-app-engine objectify


    【解决方案1】:

    您可能正在考虑使用关系数据库策略。当您更新一侧的值时,另一侧将不会更新,因此您必须更新两个实体。由于这是 NoSql,因此您必须换种方式思考。

    我会采取这个策略。

    首先加载“旧”用户实体并再次将其保存在新结构中。一旦您确认您加载的所有数据都已转换为新对象(我建议使用 BigQuery),那么您应该使用索引的 oldId 为每个引用的实体生成一个任务,并更新 ReferencedEntity 中所有者的引用。

    加载需要一段时间,但这可能是一种安全的方式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-08
      • 2016-05-15
      • 1970-01-01
      • 2021-10-16
      • 2011-12-30
      • 1970-01-01
      • 2019-10-05
      • 2021-01-18
      相关资源
      最近更新 更多