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

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

解决方法:

对的,这是可能的.

        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");
上一篇:android – 领域在空对象中查找查询结果


下一篇:Realm.io – 在Android之外使用(在Java中)