2016-12-01 125 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