6

我有一个要应用迁移的领域模型。但是,当我应用迁移时,我得到了错误

Configurations cannot be different if used to open the same file. 
The most likely cause is that equals() and hashCode() are not overridden in the migration class: 

在我的 Activity 类中,配置设置为:

realmConfiguration = new RealmConfiguration
                .Builder(this)
                .schemaVersion(0)
                .migration(new Migration())
                .build();

我使用领域实例来获取一些值。然后我使用以下方法应用迁移:

RealmConfiguration config = new RealmConfiguration.Builder(this)
            .schemaVersion(1) // Must be bumped when the schema changes
            .migration(new Migration()) // Migration to run
            .build();

Realm.setDefaultConfiguration(config);

当我调用它时:realm = Realm.getDefaultInstance();我收到上面的错误。我是否正确应用迁移?

4

5 回答 5

7

您的迁移应如下所示:

public class MyMigration implements Migration {
    //... migration

    public int hashCode() {
       return MyMigration.class.hashCode();
    }

    public boolean equals(Object object) {
       if(object == null) { 
           return false; 
       }
       return object instanceof MyMigration;
    }
}
于 2016-11-17T12:57:30.377 回答
1

正如异常消息所说,您是否尝试过覆盖equalshashcode在您的班级中?Migration

The most likely cause is that equals() and hashCode() are not overridden in the migration class
于 2016-08-01T07:28:23.453 回答
0

我相信问题是消息“如果用于打开同一个文件,配置不能不同”的第一部分。您正在使用两种不同的配置来打开领域。您的一个示例使用 schemaVersion 0,另一个使用 schemaVersion 1。您应该在整个应用程序中使用相同的版本。

每次您需要新的数据迁移时,都会增加模式版本号,并在 Migration 类中添加代码,查看旧/新模式版本并进行适当的迁移。

于 2017-03-10T02:43:27.640 回答
0

覆盖 Migration 类中的 equals 和 hashcode 方法,如下所示:

@Override
public boolean equals(Object obj) {
    return obj != null && obj instanceof Migration; // obj instance of your Migration class name, here My class is Migration.
}

@Override
public int hashCode() {
    return Migration.class.hashCode();
}
于 2017-03-09T11:05:30.693 回答
-1

将架构版本添加为 MyMigration 中的字段,并覆盖equals():

    private final int version;

    @Override
    public boolean equals(Object o) {
        return this.version == ((MyMigration)o).version;
    }

    public MyMigration(int version) {
        this.version = version;
    }
于 2016-11-17T12:53:50.333 回答