Realm Android Migration可以更改主键数据类型而不是写入数据

时间:2016-12-20 12:50:40

标签: android realm realm-migration

我正在使用Realm android并希望使用Migration更改现有主键的数据类型。

我使用以下代码进行迁移

schema.get("Test")
      .addField("id_new", String.class)
      .removeField("id")
      .addPrimaryKey("id_new")
      .renameField("id_new", "id");

上面的代码是在不中断的情况下迁移模式,但是如果我尝试在新模式中写入数据则会失败。

我不想保留任何旧数据,因此不使用转换方法。

1 个答案:

答案 0 :(得分:1)

如果您不想保留数据,可以只调用构建器的 deleteRealmIfMigrationNeeded()方法:

RealmConfiguration config = new RealmConfiguration.Builder()
                                          .deleteRealmIfMigrationNeeded()
                                          .build();

但我认为,它只适用于应用程序的开发周期。

发布的应用程序必须具有真正的迁移脚本。对于你的问题,我建议使用:

schema.get("Test")
  .addField("id_new", String.class, FieldAttribute.PRIMARY_KEY)
  .transform(new RealmObjectSchema.Function() {
                    @Override
                    public void apply(DynamicRealmObject obj) {
                        // yuors transformation from id to id_new
                    }
                })
  .removeField("id")
  .renameField("id_new", "id");

另见:

Official docs

Migration sample class