2016-12-01 77 views
0

我遇到Realm抱怨重複主鍵的問題。這是問題:Android中嵌套領域對象的主鍵

我有兩個領域類。我需要分別訪問兩者,並且還有一對多關係。

主題:

public class Topic extends RealmObject{ 

    @PrimaryKey 
    private String id; 

    private String subject; 
    } 

和問題:

public class Question extends RealmObject { 

    @PrimaryKey 
    private String _id; 
    private RealmList<Option> options = null; 
    private RealmList<Answer> answer; 
    private Topic topic; 
} 

不止一個問題可以有相同的話題。但是,當我嘗試創建領域問題數據庫時,領域引發RealmPrimaryKeyConstraintException:值已經存在:異常。並且使用主題類的主鍵拋出異常。

我該如何避免這種情況?

+0

您的意思是在主題聲明中有_id嗎? –

+0

不是。主題'id'與問題'_id'(該問題是唯一的)不同(對於主題是唯一的)。命名只是它在服務器數據庫上設置的方式 – pritamps

+0

當人們在創建時使用'createObject()'而不指定對象的id時,或者有時使用'copyToRealm()'而不是'copyToRealmOrUpdate() )'那樣做。考慮到事務代碼未顯示,我們實際上並未看到錯誤的實際原因。 – EpicPandaForce

回答

0

我在Realm Github找到了this issue的解決方案。我的代碼應該已經工作,因爲我已經使用這兩個類的主鍵和copyToRealmOrUpdate創建對象。

但是,我在主題表之前創建了問題表,這就是爲什麼Realm嘗試將新對象複製到主題表。顯然copyToRealmOrUpdate不會自動爲嵌套的Realm對象假設copyToRealmOrUpdate行爲。

只是顛倒創建的順序就修正了它,因爲(從Github鏈接),如果兩個類都有主鍵,則Realm處理已經存在的對象就好了。

這可能是Realm中的一個錯誤?

+0

'copyToRealmOrUpdate'應遞歸工作。如果你可以在示例項目中重現這一點,並在我們的Github頁面上創建一個問題,它會有很大的幫助:https://github.com/realm/realm-java/issues –

+0

我將在下週初做這個,並編輯這個完成後對問題發表評論。 – pritamps