如果拥有以前具有String ID的User实体。我想迁移到一个看似简单的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;
}
由于我通过不同的字段加载用户,我可以检查用户是否有空newId
,如果是这样,只有null旧的将其保存回来,以便自动生成器在{{1}中设置新的Id }} field。
现在问题是我与其他实体的关系。我该如何迁移?我双方都有newId
,所以我想我可以在用户实体端加载refs并用新Id替换另一端。
一般问题是如果一方需要新的身份证如何将n转换为m关系?
答案 0 :(得分:1)
您可能正在考虑使用关系数据库策略。当您更新一侧的值时,另一侧将不会更新,因此您必须更新两个实体。由于这是NoSql,你必须以不同的方式思考。
我会采取这种策略。
首先加载“旧”用户实体并将其再次保存在新结构中。一旦确认已加载的所有数据都已转换为新对象(我建议使用BigQuery),那么您应该使用索引的oldId为每个引用的实体生成一个任务,并更新ReferencedEntity中所有者的引用。 / p>
加载需要一段时间,但这可能是一种安全的方法。