Docs 菜单
Docs 主页
/ /
Atlas Device SDKs
/ /

CRUD - 删除 - Java SDK

在此页面上

  • 关于本页中的示例
  • 删除对象
  • 删除多个对象
  • 删除对象及其依赖对象
  • 删除特定类型的所有对象
  • 删除 Realm 中的所有对象
  • 使用迭代器删除对象

本页上的示例使用具有两种 Realm 对象类型的项目管理应用的Realm 数据模型: ProjectTaskProject具有零个或多个Tasks

请参阅 ProjectTask 这两个类的模式,如下所示:

ProjectTask.java
import org.bson.types.ObjectId;
import io.realm.RealmObject;
import io.realm.annotations.PrimaryKey;
import io.realm.annotations.RealmClass;
import io.realm.annotations.Required;
public class ProjectTask extends RealmObject {
@PrimaryKey
public ObjectId _id;
@Required
public String name;
public String assignee;
public int progressMinutes;
public boolean isComplete;
public int priority;
@Required
public String _partition;
}
Project.java
import org.bson.types.ObjectId;
import io.realm.RealmList;
import io.realm.RealmObject;
import io.realm.annotations.PrimaryKey;
import io.realm.annotations.RealmClass;
import io.realm.annotations.Required;
public class Project extends RealmObject {
@PrimaryKey
public ObjectId _id;
@Required
public String name;
public RealmList<ProjectTask> tasks = new RealmList<>();
}
ProjectTask.kt
import io.realm.RealmObject
import io.realm.annotations.PrimaryKey
import io.realm.annotations.Required
import org.bson.types.ObjectId
open class ProjectTask(
@PrimaryKey
var _id: ObjectId = ObjectId(),
@Required
var name: String = "",
var assignee: String? = null,
var progressMinutes: Int = 0,
var isComplete: Boolean = false,
var priority: Int = 0,
var _partition: String = ""
): RealmObject()
Project.kt
import io.realm.RealmList
import io.realm.RealmObject
import io.realm.annotations.PrimaryKey
import io.realm.annotations.Required
import org.bson.types.ObjectId
open class Project(
@PrimaryKey
var _id: ObjectId = ObjectId(),
@Required
var name: String = "",
var tasks: RealmList<ProjectTask> = RealmList(),
): RealmObject()

要从域中删除对象,请使用 RealmObject子类的deleteFromRealm()方法的动态或静态版本。

以下示例展示了如何使用deleteFromRealm()从域中删除一个对象:

realm.executeTransaction(r -> {
// Get a turtle named "Tony".
Turtle tony = r.where(Turtle.class).equalTo("name", "Tony").findFirst();
tony.deleteFromRealm();
// discard the reference
tony = null;
});
realm.executeTransaction { r: Realm ->
// Get a turtle named "Tony".
var tony = r.where(Turtle::class.java)
.equalTo("name", "Tony")
.findFirst()
tony!!.deleteFromRealm()
// discard the reference
tony = null
}

提示

请勿在删除对象后使用该对象

如果您在删除对象后尝试使用该对象,则 SDK 会引发错误。

要从Realm 中删除对象,请使用包含要删除的对象的 RealmResults删除的{ 域 } deleteAllFromRealm() 。 您可以使用where()方法从RealmResults过滤出对象的子集。

以下示例演示了如何使用deleteAllFromRealm()从域中删除集合:

realm.executeTransaction(r -> {
// Find turtles older than 2 years old.
RealmResults<Turtle> oldTurtles = r.where(Turtle.class).greaterThan("age", 2).findAll();
oldTurtles.deleteAllFromRealm();
});
realm.executeTransaction { r: Realm ->
// Find turtles older than 2 years old.
val oldTurtles = r.where(Turtle::class.java)
.greaterThan("age", 2)
.findAll()
oldTurtles.deleteAllFromRealm()
}

有时,您希望在删除父对象时删除某些依赖对象。 我们将此称为链式删除。 Realm 不会为您删除依赖对象。 如果您不自行删除这些对象,它们在您的 Realm 中将保持孤立状态。 这是否是一个问题取决于应用程序的需求。

目前,删除依赖对象的最佳方法是遍历依赖项并在删除父对象之前删除依赖对象。

以下示例演示了如何通过首先删除 Ali 的所有海龟,然后删除 Ali 来执行链式删除:

realm.executeTransaction(r -> {
// Find a turtle enthusiast named "Ali"
TurtleEnthusiast ali = r.where(TurtleEnthusiast.class).equalTo("name", "Ali").findFirst();
// Delete all of ali's turtles
ali.getTurtles().deleteAllFromRealm();
ali.deleteFromRealm();
});
realm.executeTransaction { r: Realm ->
// Find a turtle enthusiast named "Ali"
val ali = r.where(TurtleEnthusiast::class.java)
.equalTo("name", "Ali").findFirst()
// Delete all of ali's turtles
ali!!.turtles!!.deleteAllFromRealm()
ali.deleteFromRealm()
}

Realm 支持从 域 中删除Realm 类型的所有实例。

以下示例演示了如何使用删除 ()从域中删除所有 Turtle 实例:

realm.executeTransaction(r -> {
r.delete(Turtle.class);
});
realm.executeTransaction { r: Realm ->
r.delete(Turtle::class.java)
}

可以从 Realm 中删除所有对象。 这不会影响 Realm 的模式。 这对于在原型设计时快速清理 Realm 非常有用。

以下示例演示了如何使用deleteAll() 从 Realm 中删除所有内容:

realm.executeTransaction(r -> {
r.deleteAll();
});
realm.executeTransaction { r: Realm ->
r.deleteAll()
}

由于 域 collection始终反映最新状态,因此当您迭代collection时,它们可能会出现、消失或更改。要获得可迭代的稳定collection,可以创建collection数据的快照。快照可保证元素的顺序不会更改,即使删除元素也是如此。

有关示例,请参阅迭代。

后退

Update