从Realm中删除多项关系中的项目

时间:2016-06-03 20:08:52

标签: android realm

我有两个班,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?

1 个答案:

答案 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
  }  
}
相关问题