【发布时间】:2016-12-07 00:32:40
【问题描述】:
我可以在领域迁移脚本中用新主键更改旧主键吗?
【问题讨论】:
我可以在领域迁移脚本中用新主键更改旧主键吗?
【问题讨论】:
是的,这是可能的。
RealmObjectSchema objectSchema = schema.get("MyObject");
objectSchema.addField("newId", long.class)
.transform(new RealmObjectSchema.Function() {
@Override
public void apply(DynamicRealmObject obj) {
obj.setLong("newId", getNewId(obj));
}
})
.removeField("id")
.renameField("newId", "id")
.addPrimaryKey("id");
但是,您不能直接将字段创建为
objectSchema.addField("newId", long.class, FieldAttribute.PRIMARY_KEY)
因为这些值在您的数据库中被初始化为 0,这意味着您将违反创建约束。所以你必须在设置值之后才添加主键约束。
在你的情况下,
RealmObjectSchema objectSchema = schema.get("MyObject");
objectSchema.addField("newId", long.class)
.transform(new RealmObjectSchema.Function() {
@Override
public void apply(DynamicRealmObject obj) {
obj.setLong("newId", getNewId(obj));
}
})
.removePrimaryKey()
.addPrimaryKey("newId");
【讨论】: