更新我的领域架构时,我重新配置了RealmMigration
以添加新的类/字段,但是我忘了更新架构版本。当我更新应用程序时,我没有遇到任何问题,但后来意识到我忘了更新架构版本,这令人困惑,因为我现在意识到领域更新了我的架构而没有指定版本更改。
因此,当我更新它时,我得到了类已经存在的异常,这更令人困惑,因为现在我也不知道如何设置我的模式版本 - 我更改了模式,但更改已经完成由RealmMigration
对象,所以我不知道我是否应该将它留在旧版本号,导致没有类已存在异常,或将其更改为正确的版本号,从而导致异常。 / p>
如果领域遇到领域迁移异常,它是否可以使用给定的RealmMigration
对象执行迁移;即使架构版本从未更新过吗?
答案 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),正确的迁移脚本将自动启动。