【问题标题】:Android: Change old primary key in realm migrationAndroid:更改领域迁移中的旧主键
【发布时间】:2016-12-07 00:32:40
【问题描述】:

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

【问题讨论】:

    标签: android realm


    【解决方案1】:

    是的,这是可能的。

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

    【讨论】:

    • 不想删除现有字段。我想通过删除旧的主键约束来添加具有主键约束的新字段
    • 在 iOS 中有可能吗?有参考吗?
    • 这实际上是一个非常好的问题。我不太了解 iOS 自动迁移 API。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多