2016-04-04 7 views
0

私は、ユーザーが自分の犬(1対1の関係)で人を作ることができるAndroidのフォームのサンプルを作成しているので、私は人と犬のモデルを設計しました。オブジェクト)。だから私は彼の犬のAndroidと人物オブジェクトを作成するために、ボタンをクリックしたときには私は、このエラーがスローされます。レルム:レルムオブジェクトを作成(または投稿)するにはどうすればよいですか?

RealmPrimaryKeyConstraintException: Value already exists:

私はレルムを作成するために使用される方法は、オブジェクトcopyToRealm

realm.copyToRealm(persona.getPerro()); 
realm.copyToRealm(persona); 

しかし、研究の後で解決のために私は人々がcopyToRealmOrUpdate

realm.copyToRealmOrUpdate(persona.getPerro()); 
realm.copyToRealmOrUpdate(persona); 

を使用することを見て、私はそれを使用したときに、私のアプリが働いていました。しかし、私はまだ疑問を持っています。私は、copyToRealmの代わりにcopyToRealmOrUpdateの代わりにcopyToRealmOrUpdateを使用することを検討する必要があることを知りたいのですが、今は私がアプリケーション開発で作業しているので、私が使用するDBでRealmを使用したいからです。(そのため、 Realmで作業する方法をテストするためのサンプルです。そのため、オブジェクト間に多くのフィールドと関係を持つアプリケーションを開発する必要があります)。

このエラーが発生する理由(RealmPrimaryKeyConstraintException: Value already exists: )?

RealmObjectsを作成するにはどうすればよいですか?

PD:私は

copyToRealm or copyToRealmOrUpdate 

メソッドを使用するたびに、私は

がintのデフォルト値であるあなたは整数として主キーを持っていると仮定するとbeginTransaction()

+0

あなたのPOJOクラスは何ですか? –

+0

このメソッドは、彼らが言うことをかなり行います。 'copyToRealm'は毎回新しいコピーを作成し、' copyToRealmOrUpdate'は既存のオブジェクトがあれば更新します。この動作は再帰的であることに注意してください。主キーを持たないオブジェクトを参照すると、常に再び挿入され、決して更新されません。 –

答えて

3

commitTransaction()とそれを囲みますフィールドがあるので、RealmObjectとの値がある場合は、 odeフィールドの場合、realm.createObject(YourRealmClass.class)は、上記のエラーが発生して失敗することを意味します。

デフォルト値のオブジェクトが作成されます。

What is the better way to create RealmObjects?

copyToRealmOrUpdate()は、レコードが存在するかどうか最初にチェックするので、使用する方が適しています。レコードが存在する場合、レコードが存在しない場合は更新され、新しいレコードが挿入されます。

関連する問題