使用新架构的领域迁移
Realm migration with new schema
我有一个应用程序已经使用了领域数据库。我现在想向模式添加一个新的 RealmObject(假设我想添加 Person
作为我的新 RealmObject class)。从文档看来我需要执行以下操作才能完成这项工作:
RealmConfiguration config = new RealmConfiguration.Builder()
.schemaVersion(1) // Must be bumped when the schema changes
.migration(new MyMigration()) // Migration to run instead of throwing an exception
.build()
// Example migration adding a new class
class MyMigration extends RealmMigration {
@Override
public void migrate(DynamicRealm realm, long oldVersion, long newVersion) {
// DynamicRealm exposes an editable schema
RealmSchema schema = realm.getSchema();
// Migrate to version 1: Add a new class.
// Example:
// public Person extends RealmObject {
// private String name;
// private int age;
// // getters and setters left out for brevity
// }
if (oldVersion == 0) {
schema.create("Person")
.addField("name", String.class)
.addField("age", int.class);
oldVersion++;
}
etc....
我的问题是:我们真的需要在这里创建 Person
架构 "by hand"(即添加字段及其类型)吗?或者有没有办法使用 Person
RealmObject 因为我们已经在
中定义了哪些字段应该属于新的 class
My question here: do we really need to create the Person schema "by hand" (i.e. add the fields, with their type) here?
是的。
Or is there a way to use the Person RealmObject since we have already defined what fields should belong to the new class there
我实际上和 Christian Melchior here 谈过这个,但是问题 使用 当前存在的 RealmModel 类 用于定义您需要添加的字段和需要删除的字段是:
如果你有一个复杂的迁移(涉及renameField()
和transform()
操作),那么不能保证你定义的从对象的V5到对象的V6的操作仍然是可能的做,如果你的迁移基于你在架构版本 V8 中的领域模型。
这实质上意味着考虑到 RealmModels 可能会发生变化,只是 "updating to the latest model" 甚至可能导致数据丢失,您将引用不存在的字段,等等。
基本上,使用当前版本的 Realm 模型来定义模式修改操作是面向未来的。
我有一个应用程序已经使用了领域数据库。我现在想向模式添加一个新的 RealmObject(假设我想添加 Person
作为我的新 RealmObject class)。从文档看来我需要执行以下操作才能完成这项工作:
RealmConfiguration config = new RealmConfiguration.Builder()
.schemaVersion(1) // Must be bumped when the schema changes
.migration(new MyMigration()) // Migration to run instead of throwing an exception
.build()
// Example migration adding a new class
class MyMigration extends RealmMigration {
@Override
public void migrate(DynamicRealm realm, long oldVersion, long newVersion) {
// DynamicRealm exposes an editable schema
RealmSchema schema = realm.getSchema();
// Migrate to version 1: Add a new class.
// Example:
// public Person extends RealmObject {
// private String name;
// private int age;
// // getters and setters left out for brevity
// }
if (oldVersion == 0) {
schema.create("Person")
.addField("name", String.class)
.addField("age", int.class);
oldVersion++;
}
etc....
我的问题是:我们真的需要在这里创建 Person
架构 "by hand"(即添加字段及其类型)吗?或者有没有办法使用 Person
RealmObject 因为我们已经在
My question here: do we really need to create the Person schema "by hand" (i.e. add the fields, with their type) here?
是的。
Or is there a way to use the Person RealmObject since we have already defined what fields should belong to the new class there
我实际上和 Christian Melchior here 谈过这个,但是问题 使用 当前存在的 RealmModel 类 用于定义您需要添加的字段和需要删除的字段是:
如果你有一个复杂的迁移(涉及renameField()
和transform()
操作),那么不能保证你定义的从对象的V5到对象的V6的操作仍然是可能的做,如果你的迁移基于你在架构版本 V8 中的领域模型。
这实质上意味着考虑到 RealmModels 可能会发生变化,只是 "updating to the latest model" 甚至可能导致数据丢失,您将引用不存在的字段,等等。
基本上,使用当前版本的 Realm 模型来定义模式修改操作是面向未来的。