我有两个班,Trip和TravelStamp。旅行有很多TravelStamps,TravelStamps有很多旅行。
他们被宣布为这样。
public class Travelstamp extends RealmObject{
@PrimaryKey
private int id;
private Date timestamp;
private double lat;
private double lon;
private boolean sync;
private Date syncDate;
// getters and setters //
...
}
public class Trip extends RealmObject {
@PrimaryKey
private String id;
private String name;
private Date start;
private Date end;
private RealmList<TravelStamp> stamps;
//getters and setters
...
}
我想要做的是从Realm移除一次旅行。在TravelStamp与任何其他旅行没有关联的情况下,我还想删除与该旅行相关的任何TravelStamp。我如何能够找出与单个TravelStamp对象相关的Trips?
答案 0 :(得分:3)
您正在寻找的是级联删除。它尚未在Realm中实现,但这里有一个问题,有一些可能的解决方法:https://github.com/realm/realm-java/issues/2717
一个简单的选择是实现你自己的删除方法,如下所示:
public class Trip extends RealmObject {
public RealmList< TravelStamp > stamps;
...
public void cascadeDelete(Realm realm) {
List<TravelStamp> stampsToDelete = new ArrayList<>();
for (TravelStamp stamp : stamp) {
if (realm.where(Travel.class).equalTo("stamps.id", stamp.getId()).count() == 1) {
stampsToDelete.add(stamp);
}
}
for (TravelStamp stamp : stampsToDelete) {
stamp.deleteFromRealm();
}
deleteFromRealm(); // delete this object
}
}