保存链接对象主键值已存在关系

时间:2017-10-21 13:38:45

标签: android database realm android-database realm-list

我刚开始使用RealmDB并且无法弄清楚如何正确保存链接对象,以实现某种foreign key

这是我的主要User模型。

public class UserModel extends RealmObject {
    @PrimaryKey
    public Long id;
    public String firstName;
    public String lastName;
    public UserSettings userSettingsModel;
}

UserSettings模型定义如下。

public class UserSettingsModel extends RealmObject {
    @PrimaryKey
    private Long id;
    public String email;
    public RealmList<Car> cars;
}

Car 本身就是一个模型。

public class Car extends RealmObject {
    @PrimaryKey
    private Long id;
    public String model;
}

问题在于,当我尝试保存UserModel时,它会尝试重新创建分配给它的所有对象。所以在我保存用户模型之前,我已经创建了一些Car个对象。

我不需要创建它们,而是像SQL数据库中的外键一样引用它们。当我从数据库中检索用户时,它应该通过主键自动加载所有相关数据。

是否可以使用Realm实现此类行为?

2 个答案:

答案 0 :(得分:0)

如果托管对象尚未存在,则应使用realm.createObject(clazz, pkValue);创建托管对象,然后将其设置为值或将其添加到您获得另一个托管对象的RealmList中。

您还可以使用copyToRealmOrUpdate()从非托管对象创建托管对象(如果对象具有主键)。

  

当我从数据库中检索用户时,它应该按主键自动加载所有相关数据。

RealmList允许访问相关对象,实际上,也可以通过调用.where()来查询它。但是,这不是基于主键。该功能在&#34;计算字段&#34;下跟踪。

答案 1 :(得分:0)

感谢您的帮助。使用copyToRealmOrUpdate方法而非copyToRealm解决了此问题。

相关问题