CRUD - 削除 - Java SDK
項目一覧
このページの例について
このページの例では、 Project
とTask
の 2 つの Realm オブジェクトタイプを持つプロジェクト管理アプリのデータモデルを使用します。 Project
には 0 個以上のTasks
があります。
これらの 2 つのクラス、 Project
とTask
のスキーマを以下で参照してください。
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 { public ObjectId _id; public String name; public String assignee; public int progressMinutes; public boolean isComplete; public int priority; public String _partition; }
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 { public ObjectId _id; public String name; public RealmList<ProjectTask> tasks = new RealmList<>(); }
import io.realm.RealmObject import io.realm.annotations.PrimaryKey import io.realm.annotations.Required import org.bson.types.ObjectId open class ProjectTask( var _id: ObjectId = ObjectId(), var name: String = "", var assignee: String? = null, var progressMinutes: Int = 0, var isComplete: Boolean = false, var priority: Int = 0, var _partition: String = "" ): RealmObject()
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( var _id: ObjectId = ObjectId(), var name: String = "", var tasks: RealmList<ProjectTask> = RealmList(), ): RealmObject()
オブジェクトの削除
Realm からオブジェクトを削除するには、 RealmObjectサブクラスのdeleteFromRealm()
メソッドの動的バージョンまたは静的バージョンのいずれかを使用します。
次の例は、 deleteFromRealm()を使用して Realm から 1 つのオブジェクトを削除する方法を示しています。
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 }
Tip
削除後のオブジェクトを使用しない
オブジェクトが削除された後に使用しようとすると、SDK はエラーをスローします。
複数のオブジェクトの削除
Realm からオブジェクトを削除するには、削除するオブジェクトを含むRealmResultsインスタンスのdeleteAllFromRealm()
メソッドを使用します。 where()メソッドを使用して、 RealmResults
をオブジェクトのサブセットにフィルタリングできます。
次の例は、 deleteAllFromRealm()を使用して Realm からコレクションを削除する方法を示しています。
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 内で孤立したままになります。 これが問題になるかどうかは、アプリケーションのニーズによって異なります。
現在のところ、依存関係オブジェクトを削除する最良の方法は、親オブジェクトを削除する前に、依存関係を反復処理して削除することです。
次の例では、まず Eli のタームをすべて削除し、次に Eli を削除するという連鎖削除を実行する方法を示しています。
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 からのRealm タイプのすべてのインスタンスの削除をサポートしています。
次の例は、 delete()を使用して Realm からすべての Torle インスタンスを削除する方法を示しています。
realm.executeTransaction(r -> { r.delete(Turtle.class); });
realm.executeTransaction { r: Realm -> r.delete(Turtle::class.java) }
Realm 内のすべてのオブジェクトの削除
すべてのオブジェクトを Realm から削除することができます。 これは Realm のスキーマには影響しません。 これは、プロトタイプ作成中に Realm をすばやくクリアするのに便利です。
次の例は、 deleteAll()を使用して Realm からすべてを削除する方法を示しています。
realm.executeTransaction(r -> { r.deleteAll(); });
realm.executeTransaction { r: Realm -> r.deleteAll() }
イテレータを使用したオブジェクトの削除
Realm コレクションは常に最新の状態を反映するため、コレクションを反復処理している間に表示されたり、消えたり、変更されたりする可能性があります。 反復処理できる安定したコレクションを取得するには、コレクションのデータのスナップショットを作成します。 スナップショットは、要素が削除された場合でも、要素の順序が変更されないことを保証します。
例については、「反復 」を参照してください。