领域迁移了架构,即使架构版本从未更改过
Realm migrated schema even though the schema version was never changed
更新我的领域模式时,我重新配置了 RealmMigration
以添加新的 class/fields ,但是我忘记更新模式版本。当我更新应用程序时,我没有遇到任何问题,但后来意识到我忘记更新架构版本,这很令人困惑,因为我现在意识到领域更新了我的架构而没有我指定版本已更改。
所以当我更新它时,我得到了 class 已经存在的异常,这更加令人困惑,因为现在我也不知道如何设置我的模式版本——我改变了模式,但是RealmMigration
对象已经进行了更改,所以我不知道是否应该将其保留在旧版本号,导致没有 class 已经存在异常,或者将其更改为正确的版本号,导致异常。
如果遇到领域迁移异常,领域是否可以使用给定的 RealmMigration
对象执行迁移?即使模式版本从未更新过?
假设您的迁移代码是:
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
class 或修改版本。但是你可以使用你知道 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,实际的 - 2),适当的迁移脚本将自动启动。
更新我的领域模式时,我重新配置了 RealmMigration
以添加新的 class/fields ,但是我忘记更新模式版本。当我更新应用程序时,我没有遇到任何问题,但后来意识到我忘记更新架构版本,这很令人困惑,因为我现在意识到领域更新了我的架构而没有我指定版本已更改。
所以当我更新它时,我得到了 class 已经存在的异常,这更加令人困惑,因为现在我也不知道如何设置我的模式版本——我改变了模式,但是RealmMigration
对象已经进行了更改,所以我不知道是否应该将其保留在旧版本号,导致没有 class 已经存在异常,或者将其更改为正确的版本号,导致异常。
如果遇到领域迁移异常,领域是否可以使用给定的 RealmMigration
对象执行迁移?即使模式版本从未更新过?
假设您的迁移代码是:
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
class 或修改版本。但是你可以使用你知道 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,实际的 - 2),适当的迁移脚本将自动启动。