Java 使用新模式进行领域迁移

Java 使用新模式进行领域迁移,java,android,realm,realm-migration,Java,Android,Realm,Realm Migration,我有一个应用程序已经使用了领域数据库。现在我想向模式中添加一个新的RealmObject(比如我想添加Person作为我的新RealmObject类)。从文档中可以看出,我需要执行以下操作才能完成此任务: RealmConfiguration config = new RealmConfiguration.Builder() .schemaVersion(1) // Must be bumped when the schema changes .migration(new MyMigration

我有一个应用程序已经使用了领域数据库。现在我想向模式中添加一个新的RealmObject(比如我想添加
Person
作为我的新RealmObject类)。从文档中可以看出,我需要执行以下操作才能完成此任务:

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
模式(即添加字段及其类型)吗?或者有没有一种方法可以使用
Person
RealmObject,因为我们已经定义了哪些字段应该属于那里的新类

我的问题是:我们真的需要在这里“手工”创建Person模式(即添加字段及其类型)吗

或者有没有一种方法可以使用Person RealmObject,因为我们已经定义了哪些字段应该属于那里的新类

实际上,我与Christian Melchior讨论过这一点,但是使用当前存在的realmodel类定义需要添加哪些字段以及需要删除哪些字段的问题是:

如果您有一个复杂的迁移(涉及
renameField()
transform()
操作),那么如果您的迁移基于架构版本V8以后的领域模型,则无法保证您从对象的V5定义到对象的V6的操作仍然可以执行

这本质上意味着,考虑到realmodel可能会发生更改,仅“更新到最新模型”甚至可能导致数据丢失,您将引用不存在的字段,等等

基本上,使用领域模型的当前版本来定义模式修改操作不是未来的证明。

我的问题是:我们真的需要在这里“手动”(即添加字段及其类型)创建Person模式吗?是的,我想这有助于你: