gpt4 book ai didi

android - Realm :如何查询多对多字段

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:36:59 28 4
gpt4 key购买 nike

我最近在 Joaquim Verques 的这次演讲中听说了 Realm for android(也可用于 iOS) .非常有趣且非常强大的持久数据工具。

我决定在观看视频、研究和阅读文档后尝试一下。

我发现它非常易于使用和设置,但我最终卡在了项目的中间,因为我无法成功地对多对多关系进行查询。

我已经为这个主题创建了一个小例子。

我的模型:

public class Feed extends RealmObject {

@PrimaryKey
private int id;
private String title;
private String description;
private String link;
private Terms terms;

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

public String getTitle() {
return title;
}

public void setTitle(String title) {
this.title = title;
}

public String getDescription() {
return description;
}

public void setDescription(String description) {
this.description = description;
}

public String getLink() {
return link;
}

public void setLink(String link) {
this.link = link;
}

public Terms getTerms() {
return terms;
}

public void setTerms(Terms terms) {
this.terms = terms;
}
}

public class Terms extends RealmObject {

private String tag;
private RealmList<Category> categories;

public String getTag() {
return tag;
}

public void setTag(String tag) {
this.tag = tag;
}

public RealmList<Category> getCategories() {
return categories;
}

public void setCategories(RealmList<Category> categories) {
this.categories = categories;
}
}

public class Category extends RealmObject {
@PrimaryKey
private int id;
private String name;

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}
}

到目前为止一切顺利,现在我要将提要列表保存到 Realm (使其持久化),然后尝试进行一些查询。

    public static void test(final Context context,final List<Feed> feedList) {
Realm realm = null;
try {
realm = Realm.getInstance(context);
realm.beginTransaction();
realm.copyToRealmOrUpdate(feedList);
realm.commitTransaction();
RealmResults<Feed> realmResults = realm.where(Feed.class).findAll();// return me all feeds
RealmResults<Feed> realmResults1 = realm.where(Feed.class).equalTo("id", 1).findAll(); // return feed with id 1
RealmResults<Feed> realmResults2 = realm.where(Feed.class).equalTo("terms.tag", "tech").findAll(); // return feeds //with tag = "tech"
RealmResults<Feed> realmResults3 = realm.where(Feed.class).equalTo("terms.category.name", "test").findAll(); //exception here
}
} catch (Exception e) {
//Empty
Log.d("Test","",e);
} finally {
if (realm != null)
realm.close();
}
}
}

一切都运行良好,直到最后一个查询,我得到这个异常:“java.lang.IllegalArgumentException:无效查询:类别不引用类。”

所以我的问题是我如何成功地进行这种查询,因为我希望 realm 向我返回每个提要,其中包含至少 1 个名称为“test”的类别

非常感谢

最佳答案

您的字段称为“类别”而不是“类别”。第三个查询应该是:

RealmResults<Feed> realmResults3 = realm.where(Feed.class).equalTo("terms.categories.name", "test").findAll();

关于android - Realm :如何查询多对多字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29236990/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com