![](/img/trans.png)
[英]Realm: How to query only the objects of a father in a one-to-many relationship
[英]Realm: How to query with many to many field
我最近在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;
}
}
到目前為止一切都那么好,現在我要將一個feed列表保存到領域(讓它持久化),然后嘗試進行一些查詢。
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:無效的查詢:類別不引用類。”
所以我的問題是我如何成功地進行這種查詢,因為我希望領域能夠返回每個包含至少1個類別名稱=“test”的條款的Feed
非常感謝你
您的字段稱為“類別”而不是“類別”。 第三個查詢應該是:
RealmResults<Feed> realmResults3 = realm.where(Feed.class).equalTo("terms.categories.name", "test").findAll();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.