Realm迁移了架构,即使架构版本从未更改

时间:2016-12-13 22:02:55

标签: realm realm-migration

更新我的领域架构时,我重新配置了RealmMigration以添加新的类/字段,但是我忘了更新架构版本。当我更新应用程序时,我没有遇到任何问题,但后来意识到我忘了更新架构版本,这令人困惑,因为我现在意识到领域更新了我的架构而没有指定版本更改。

因此,当我更新它时,我得到了类已经存在的异常,这更令人困惑,因为现在我也不知道如何设置我的模式版本 - 我更改了模式,但更改已经完成由RealmMigration对象,所以我不知道我是否应该将它留在旧版本号,导致没有类已存在异常,或将其更改为正确的版本号,从而导致异常。 / p>

如果领域遇到领域迁移异常,它是否可以使用给定的RealmMigration对象执行迁移;即使架构版本从未更新过吗?

2 个答案:

答案 0 :(得分:1)

我假设你的迁移代码是:

RealmMigration migration = new RealmMigration() {
    @Override
    public void migrate(DynamicRealm realm, long oldVersion, long newVersion) {
        RealmSchema schema = realm.getSchema();
        if (oldVersion == 0) {
            schema.create("Person")
               .addField("name", String.class)
               .addField("age", int.class);
            // forgot: oldVersion++;
        }
    }
}

您无法使用该版本来确定是应添加Person类还是添加版本。但是你可以使用你知道如果Person存在,你将需要碰撞版本。

RealmMigration migration = new RealmMigration() {
    @Override
    public void migrate(DynamicRealm realm, long oldVersion, long newVersion) {
        RealmSchema schema = realm.getSchema();
        if (oldVersion == 0) {
            if (schema.contains("Person)) {
                oldVersion++;
            } else {
                schema.create("Person")
                   .addField("name", String.class)
                   .addField("age", int.class);
                oldVersion++;
            }
        }
    }
}

答案 1 :(得分:0)

如果忘记更改数据库版本,域迁移将无法启动并且不会损坏数据库。只需编写实际版本(即上一个 - 1,实际 - 2),正确的迁移脚本将自动启动。