Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
领域java和多对多关系_Java_Android_Realm - Fatal编程技术网

领域java和多对多关系

领域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

如何在Android上使用Realm数据库创建多对多关系?例如,我需要两种类型的对象:PostObject和HashTagObject,一个链接到另一个,类似这样

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();