我最近开始在Android上使用Realm并且仍然试图理解它。我有以下课程 -
Class A extends RealmObject{
double count;
}
Class B extends RealmObject{
RealList<A> ListofA;
}
我想选择A的所有实例,其中count> 0。所以我构建了这个查询 -
List<A> wantedAList=return realm.where(A.class)
.greaterThan("count",0)
.findAll();
现在我想从领域删除A(与任何B相关)的所有记录,这些记录不属于wantAList。所以我这样做 -
//find all the records of A
List<A> allA=realm.where(A).findAll();
//using Google Guava to find difference of sets
Set<A> allASet= Sets.newHashSet(allA);
Set<A> wantedASet= Sets.newHashSet(wantedAList);
Set<A> unWantedlASet=Sets.difference(allASet,walntedaset);
RealmList<A> newAList=new RealmList<A>();
A.addAll(Lists.newArrayList(unWantedlEvalUnitsSet));
A.deleteAllFromRealm();
如果我在这里做正确的事,请告诉我。我在这里简化了问题。在实际代码中,wantalist由复杂的where子句组成,因此也就是这种方法。
我还想检查从域中删除newAList是否会自动使用刷新列表更新B实例?
谢谢!
答案 0 :(得分:0)
1)将RealmObject
添加到HashSet
会有问题。见https://realm.io/docs/java/latest/#realmobjects-hashcode
2)使用RealmQuery.not()
创建不需要的列表并将其删除
RealmResults<A> unwantedList = realm.where(A.class)
.not()
.greaterThan("count",0)
.findAll();
unwantedList.deleteAllFromRealm();
3 {1}} RealmObject
类型的A
从Realm中删除后,B.ListOfA
中的相应对象也会自动删除。