Android:在领域迁移中更改旧主键

时间:2016-12-06 15:52:59

标签: android realm

我可以在领域迁移脚本中使用新主键更改旧主键吗?

1 个答案:

答案 0 :(得分:5)

是的,有可能。

        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");