领域:创建(或发布)领域对象的更好方法是啥?
Posted
技术标签:
【中文标题】领域:创建(或发布)领域对象的更好方法是啥?【英文标题】:Realm: What is the better way to create (or post) Realm Objects?领域:创建(或发布)领域对象的更好方法是什么? 【发布时间】:2016-04-04 16:15:23 【问题描述】:我正在 android 上做一个表单示例,用户可以在其中创建一个与她的狗(一对一关系)的人,所以我设计了一个人和狗模型,其中每个人对象都有一个狗对象(在人对象)。所以当我点击按钮用他的狗创建一个人对象时,Android会抛出这个错误:
RealmPrimaryKeyConstraintException:值已存在:
我用来创建Realm Objects的方法是copyToRealm
realm.copyToRealm(persona.getPerro());
realm.copyToRealm(persona);
但在研究解决方案后,我发现人们使用 copyToRealmOrUpdate
realm.copyToRealmOrUpdate(persona.getPerro());
realm.copyToRealmOrUpdate(persona);
当我使用它时,我的应用程序工作正常。但我还是有些疑惑。我更愿意知道我应该考虑使用copyToRealmOrUpdate
而不是copyToRealm
,因为现在我正在从事应用程序开发,我想将Realm 与我将使用的数据库一起使用(因为我正在做人和狗样本来测试如何与 Realm 一起工作,因为那时我将不得不开发一个包含大量字段和对象之间关系的应用程序)。
为什么会发生此错误 (RealmPrimaryKeyConstraintException: Value already exists:
)?
创建 RealmObjects 的更好方法是什么?
PD:每次我使用
copyToRealm or copyToRealmOrUpdate
方法,我用beginTransaction()
和commitTransaction()
括起来
【问题讨论】:
你的 POJO 类是什么? 这些方法和他们所说的差不多。copyToRealm
每次都会创建一个新副本,而copyToRealmOrUpdate
将更新任何现有对象(如果存在)。请注意,此行为是递归的,因此如果您有一个引用的对象没有主键,它们总是会再次插入,永远不会更新。
【参考方案1】:
假设你的主键是整数
0 是 int 字段的默认值,因此如果您有一个 RealmObject 以 0 作为代码字段的值,它表示realm.createObject(YourRealmClass.class)
将因您提到的错误而失败
因为它将创建一个具有默认值的对象。
创建 RealmObjects 的更好方法是什么?
copyToRealmOrUpdate()
更好用,因为它首先检查记录是否存在。如果记录存在,那么它将更新,如果记录不存在,它将插入新记录。
【讨论】:
以上是关于领域:创建(或发布)领域对象的更好方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章
AuthorizationServerSecurityConfigurer 中的领域方法的目的是啥?