无法在Realm Android中更改主键的值

时间:2017-09-08 12:32:03

标签: android realm realm-migration

我正在尝试将主键的当前值更改为另一个。像这样。

realm?.executeTransactionAsync ({ realm ->
    val teamRealmObj = realm?.where(Team::class.java)?.equalTo("name", oldTeamName)?.findFirst()
        teamRealmObj?.name = newTeamName
    })

此处name属性是主键。

我收到了这个错误。

  

失败主键字段'name'在创建对象后无法更改。

我怎样才能做到这一点?我是否必须复制(只有不同​​的名称属性)并删除旧的?这将导致一对多或多对多的关系,因为必须在数据库中的每个位置替换新对象。

需要更好的方法来做到这一点。谢谢,如果有人能帮我解决这个问题。

1 个答案:

答案 0 :(得分:5)

这段代码解决了我的问题。

realm?.executeTransactionAsync ({ realm ->
        val teamRealmObj = realm.where(Team::class.java)?.equalTo("name", oldTeamName)?.findFirst()
        val newTeamObj = realm.copyFromRealm(teamRealmObj)
        newTeamObj?.name = newTeamName
        realm.copyToRealmOrUpdate(newTeamObj)
        teamRealmObj?.deleteFromRealm()
    }

无需重新创建链接。

realm.copyToRealmOrUpdate(newTeamObj)

此行自动执行此操作。