CRUD - Excluir - SDK Java
Nesta página
Sobre os exemplos nesta página
Os exemplos nesta página usam o Modelo de dados Realm de um aplicativo de gerenciamento de projeto que tem dois Tipo de objeto de Realm: Project
e Task
. Um Project
tem zero ou mais Tasks
.
Consulte o esquema para estas duas classes, Project
e Task
, abaixo:
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()
Excluir um objeto
Para excluir um objeto de um Realm, use as versões dinâmicas ou estáticas do método deleteFromRealm()
de uma subclasse RealmObject .
O exemplo a seguir mostra como excluir um objeto de seu Realm com 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 }
Dica
Não use objetos após excluir
O SDK emitirá um erro se você tentar usar um objeto depois que ele tiver sido excluído.
Excluir vários objetos
Para excluir um objeto de um Realm, use o método deleteAllFromRealm()
da instância RealmResults que contém os objetos que você deseja excluir. Você pode filtrar o RealmResults
para um subconjunto de objetos utilizando o método onde() .
O exemplo a seguir demonstra como excluir uma collection de um Realm com 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() }
Excluir um objeto e seus objetos dependentes
Às vezes, você tem objetos dependentes que deseja excluir quando excluir o objeto pai. Chamamos isso de exclusão de encadeamento. O Realm não exclui os objetos dependentes para você. Se você mesmo não excluir o objeto, eles permanecerão órfãos em seu Realm. Se isso causará ou não um problema, dependerá das necessidades do seu aplicativo.
Atualmente, a melhor maneira de excluir objetos dependentes é iterar por meio das dependências e excluí-los antes de excluir o objeto pai.
O exemplo a seguir demonstra como realizar uma exclusão de encadeamento excluindo primeiro todas as queries de Ali e, em seguida, excluindo 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() }
Exclua todos os objetos de um tipo específico
O Realm suporta a exclusão de todas as instâncias de um tipo de Realm de um domínio.
O exemplo a seguir demonstra como excluir todas as instâncias do MongoDB de um Realm com delete():
realm.executeTransaction(r -> { r.delete(Turtle.class); });
realm.executeTransaction { r: Realm -> r.delete(Turtle::class.java) }
Excluir todos os objetos em um Realm
É possível excluir todos os objeto do Realm. Isso não afeta o esquema do Realm. Isso é útil para limpar rapidamente o seu Realm durante a criação de protótipos.
O exemplo a seguir demonstra como excluir tudo de um domínio com deleteAll():
realm.executeTransaction(r -> { r.deleteAll(); });
realm.executeTransaction { r: Realm -> r.deleteAll() }
Excluir um objeto usando um iterador
Como as collection do Realm sempre refletem o estado mais recente, elas podem aparecer, desaparecer ou alterar enquanto você itera sobre uma collection. Para obter uma collection estável na qual você pode iterar, você pode criar um instantâneo dos dados de uma collection. Um snapshot garante que a ordem dos elementos não será alterada, mesmo que um elemento seja excluído.
Para obter um exemplo, consulte Iteração.