我正在尝试将主键的当前值更改为另一个。像这样。
realm?.executeTransactionAsync ({ realm ->
val teamRealmObj = realm?.where(Team::class.java)?.equalTo("name", oldTeamName)?.findFirst()
teamRealmObj?.name = newTeamName
})
此处name属性是主键。
我收到了这个错误。
失败主键字段'name'在创建对象后无法更改。
我怎样才能做到这一点?我是否必须复制(只有不同的名称属性)并删除旧的?这将导致一对多或多对多的关系,因为必须在数据库中的每个位置替换新对象。
需要更好的方法来做到这一点。谢谢,如果有人能帮我解决这个问题。
答案 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)
此行自动执行此操作。