【问题标题】:Realm migration with new schema使用新模式的领域迁移
【发布时间】:2018-01-24 20:34:40
【问题描述】:

我有一个已经使用领域数据库的应用程序。我现在想在架构中添加一个新的 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 模式(即添加字段及其类型)吗? 是的
  • 我想这对你有帮助:medium.com/@budioktaviyans/…

标签: java android realm realm-migration


【解决方案1】:

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

是的。

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

我实际上与 Christian Melchior here 讨论过这个问题,但是 问题 使用 当前存在的 RealmModel 类 来定义哪些字段您需要添加和需要删除的字段是:

如果您进行了复杂的迁移(涉及renameField()transform() 操作),那么如果您基于您在架构版本 V8 中的领域模型上的迁移。

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

基本上,使用当前版本的 Realm 模型来定义架构修改操作并不是面向未来的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-28
    • 2017-06-03
    相关资源
    最近更新 更多