android - 领域以有效的方式删除孤立对象
问题描述
我有一个包含 BeaconData 列表的 BeaconBase 类。
public class BeaconBase extends RealmObject {
@PrimaryKey
private Integer checkInID;
@SerializedName("beacons")
@Expose
private RealmList<BeaconData> beacons;
}
public class BeaconData extends RealmObject {
@SerializedName("scanId")
@Expose
private String scanId;
@SerializedName("distance")
@Expose
private String distance;
}
BeaconData 通常会很大。可能是每小时大约 100000 行。当我删除相关的 BeaconBase 记录时,如何有效地删除 BeaconData?
我只有在 BeaconBase 中有主键。
所以当我删除 BeaconBase 记录时,成千上万的 BeaconData 记录被孤立了。我怎样才能有效地处理这种情况?
解决方案
try(Realm r = Realm.getDefaultInstance)) {
r.executeTransaction((realm) -> {
RealmResults<BeaconBase> beaconsToDelete = realm.where(BeaconBase.class)./*query here*/.findAll();
for(int i = beaconsToDelete.size() - 1; i >= 0; i--) {
BeaconBase beaconBase = beaconsToDelete.get(i);
beaconBase.getBeacons().deleteAllFromRealm();
beaconBase.deleteFromRealm();
}
});
}
尽管要稍微多一些用处,但您也可以这样做:
public class BeaconBase extends RealmObject {
@PrimaryKey
private Integer checkInID;
@SerializedName("beacons")
@Expose
private RealmList<BeaconData> beacons;
}
public class BeaconData extends RealmObject {
@SerializedName("scanId")
@Expose
private String scanId;
@SerializedName("distance")
@Expose
private String distance;
@LinkingObjects("beacons")
private final RealmResults<BeaconBase> beaconDataOf = null;
}
try(Realm r = Realm.getDefaultInstance)) {
r.executeTransaction((realm) -> {
realm.where(BeaconBase.class)./*query here*/.findAll().deleteAllFromRealm();
realm.where(BeaconData.class).isEmpty("beaconDataOf").findAll().deleteAllFromRealm();
});
}
推荐阅读
- javascript - 如何在javascript中创建标签?
- json - 在骆驼中连续调用3个restful api
- flutter - 如何通过官方的 flutter_map 插件使用折线和多边形?
- java - 带有空字符串的java switch语句
- python - 如何覆盖在其父类中使用的子类中的属性?
- oembed - 如何将 oembed API 与 soundcloud 一起使用?
- php - 当请求来自移动设备时 session_start() 无法访问 /tmp 目录
- python - 有没有办法为python的cmd模块中的函数添加值(使用程序时)
- python - 从 Lambda 函数 (AWS) 的用户列表中获取 UserId
- git - 使用两个不同的 Github 帐户