Android:更改领域迁移中的旧主键 [英] Android: Change old primary key in realm migration

查看:69
本文介绍了Android:更改领域迁移中的旧主键的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

Can I change old primary key with new primary key in realm migration script?

推荐答案

是的,有可能.

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

但是,您不能直接将字段创建为

However, you can't directly create the field as

objectSchema.addField("newId", long.class, FieldAttribute.PRIMARY_KEY)

因为在数据库中将值初始化为0,这意味着您将违反创建的约束.因此,只有在设置了值之后,才必须添加主键约束.

because the values are initialized to 0 in your database, which means you'll be violating the constraint on creation. So you must add the primary key constraint only after the values are set.

就您而言,

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:更改领域迁移中的旧主键的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆