【发布时间】:2017-09-08 12:32:03
【问题描述】:
我正在尝试将主键的当前值更改为另一个值。像这样。
realm?.executeTransactionAsync ({ realm ->
val teamRealmObj = realm?.where(Team::class.java)?.equalTo("name", oldTeamName)?.findFirst()
teamRealmObj?.name = newTeamName
})
这里的name属性是一个主键。
我收到了这个错误。
创建对象后无法更改失败的主键字段“名称”。
我怎样才能做到这一点?我是否必须制作副本(只有不同的名称属性)并删除旧的?这会在一对多或多对多关系中引起头痛,因为必须在数据库中的每个位置替换新对象。
需要更好的方法来做到这一点。如果有人能帮我解决这个问题,谢谢。
【问题讨论】:
-
Do I have to make an exact copy and delete the old one?是的,尽管copyFromRealm()可以提供帮助 -
没有。我的需要只是更改数据库中现有 RealmObject 的名称属性。
-
托管对象创建后不能修改主键的值
-
在Realm中是完全不可能的吗?
-
是的,使用
copyFromRealm()创建副本,修改主键,插入新对象,删除旧对象。删除对象会使对象链接失效,因此您需要为关系重建链接。另一种选择是使用迁移使其不是主键,但随后您需要使用copyToRealm()/insert(),并且您需要手动进行更新,并确保您没有重复.
标签: android realm realm-migration