领域java和多对多关系
如何在Android上使用Realm数据库创建多对多关系?例如,我需要两种类型的对象:PostObject和HashTagObject,一个链接到另一个,类似这样领域java和多对多关系,java,android,realm,Java,Android,Realm,如何在Android上使用Realm数据库创建多对多关系?例如,我需要两种类型的对象:PostObject和HashTagObject,一个链接到另一个,类似这样 public class PostObject extends RealmObject { @PrimaryKey private int id; private String text; private RealmList<HashTagObject> hashtags; } publi
public class PostObject extends RealmObject {
@PrimaryKey
private int id;
private String text;
private RealmList<HashTagObject> hashtags;
}
public class HashTagObject extends RealmObject {
@PrimaryKey
private int id;
private String tag;
private RealmList<PostObject> posts;
}
当我创建另一个时,我也会这样做
据我所知,这一个每次都会创建新的hashtag,最后我将有两个带有标记“tag”的hashtag对象,而我只希望有一个hashtag“tag”。为什么会有两个hashtag对象?在这里,如果只调用一次
realm.createObject(HashTagObject.class)
,则只会创建一个HashTagObject
。而且你没有设置正确的主键,当你第二次调用它时,会抛出一个异常,因为它试图使用一个重复的PK 0,这是默认值。我的意思是,如果我下次尝试使用相同的标记创建对象(HashTagObject.class),当我想将这个特定的现有标记添加到我的帖子中时,它将创建我不需要的副本。一种解决方案是在db中查找此标记,如果没有,则创建一个并添加到帖子中,如果有-获取并添加。然后最简单的解决方案是使用标记作为@PrimaryKey
。然后像这样创建它HashTagObject hto=newhashtagobject();hto.设置标签(“标签”);hto=realm.copyToRealmOrUpdate(hto)
这将创建一个独立的RealmObject
首先,copyToRealmOrUpdate
将尝试用域中相同的PK更新对象,并返回托管的RealmObject
。不再有重复的对象!
realm.beginTransaction();
PostObject post = realm.createObject(PostObject.class);
post.setText("New post");
HashTagObject tag = realm.createObject(HashTagObject.class);
tag.setTag("tag");
tag.getPosts().add(post);
post.getTags().add(tag);
realm.commitTransaction();