我有以下课程:
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;
....
}
假设我有a1
和a2
个与b1
和a2
有关的对象与某些b2
有关。
如果我执行以下查询
RealmResults<B> test1 = realm.where(B.class)
.notEqualTo("relations.aID", a1ID)
.findAllSortedAsync("name");
我会得到结果b1
和b2
。为什么我得到b2
非常清楚。我得到b1
,因为a2
也与b1
和a2ID != a1ID
有关。
我的问题是要知道领域是否只有一个解决方法来检索b2
。
答案 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不是我想要的。我肯定需要异步执行