用境界链接查询

时间:2016-03-29 10:26:27

标签: java android realm

我有以下课程:

import io.realm.RealmList;
import io.realm.RealmObject;
import io.realm.annotations.PrimaryKey;

public class A extends RealmObject {
    @PrimaryKey
    private String id;
    private String name;
    private RealmList<AB> relations = new RealmList<>();
    ...
}

public class B extends RealmObject {
    @PrimaryKey
    private String id;
    private String name;
    private RealmList<AB> relations = new RealmList<>();
    ...
}

import io.realm.RealmObject;
import io.realm.annotations.PrimaryKey;

public class AB extends RealmObject{
    @PrimaryKey
    private String id;
    private String aID;
    private String bID;
    ....
}

假设我有a1a2个与b1a2有关的对象与某些b2有关。

如果我执行以下查询

RealmResults<B> test1 = realm.where(B.class)
                             .notEqualTo("relations.aID", a1ID)
                             .findAllSortedAsync("name");

我会得到结果b1b2。为什么我得到b2非常清楚。我得到b1,因为a2也与b1a2ID != a1ID有关。

我的问题是要知道领域是否只有一个解决方法来检索b2

2 个答案:

答案 0 :(得分:0)

我唯一能想到的是你将引用的对象绑定到Relation对象AB

public class AB extends RealmObject{
    @PrimaryKey
    private String id;
    private String aID;
    private String bID;

    private A a;
    private B b;
    ....
}

然后执行AB

的查询
RealmResults<AB> results = realm.where(AB.class)
                                .notEqualTo("aID", aID1)
                                .findAllAsyncSorted("name");

因为在你的results中,你只会拥有aID不等于aID1的对象;然后,您可以使用B引用results.get(i).getB()

答案 1 :(得分:0)

以这种方式扩展查询解决问题。

RealmResults<B> test1 = realm.where(B.class)
                         .findAllSortedAsync("name");
for (AB relation : a1.getRelations()) {
        test1 = test1.where().notEqualTo("id", relation.getBID())
                .findAllSortedAsync("name");
    }

链接查询实际上仅适用于非Async方法。上面的代码如下:

RealmResults<B> test1 = realm.where(B.class)
                         .findAllSorted("name");
for (AB relation : a1.getRelations()) {
        test1 = test1.where().notEqualTo("id", relation.getBID())
                .findAllSorted("name");
    }

whcih不是我想要的。我肯定需要异步执行