Миграции позволяют изменять схему приложения, что означает, что оно позволяет добавлять, удалять, переименовывать таблицы / поля в схеме Realm.Если вы измените класс RealmModel, то вы должны написать миграцию, которая отобразит существующий файл Realm, чтобы отразить новые классы модели.
RealmConfiguration config = new RealmConfiguration.Builder()
.schemaVersion(1)
.migration(new MyMigration())
.build();
Realm.setDefaultConfiguration(config);
Версия схемы по умолчанию - 0.
Миграции довольно просты:
вы должны увеличивать версию схемы, поэтому Realm знает, что вы хотите увеличить версию схемы до определенного числа
вы должны предоставить миграцию, которая будет обрабатывать переход с одной версии на другую
Миграции описывают операции, которые необходимо выполнить, когда вам нужно перейти с одной версии схемы на другую:
public class MyMigration implements RealmMigration {
@Override
public void migrate(final DynamicRealm realm, long oldVersion, long newVersion) {
RealmSchema schema = realm.getSchema();
// Migrate from version 0 to version 1
if (oldVersion == 0) {
RealmObjectSchema userSchema = schema.get("User");
userSchema.addField("testRealm", String.class);
oldVersion++;
}
if (oldVersion == 1) { // ...
// ...
}
}
@Override
public int hashCode() { return MyMigration.class.hashCode(); }
@Override
public boolean equals(Object object) { return object != null && object instanceof MyMigration; }
}
Если вам интересно, как будет выглядеть «более сложная» миграция, - это класс, который автоматически сопоставляет одну схему с другой с помощью отражения , поэтому он содержит практически все, что вам нужнознать (кроме обработки аннотаций @RealmClass(name
, @RealmField
и @RealmModule(fieldNamingPolicy
)