Menu Docs
Página inicial do Docs
/ /
Atlas Device SDKs
/ /

CRUD - Excluir - SDK Java

Nesta página

  • Sobre os exemplos nesta página
  • Excluir um objeto
  • Excluir vários objetos
  • Excluir um objeto e seus objetos dependentes
  • Exclua todos os objetos de um tipo específico
  • Excluir todos os objetos em um Realm
  • Excluir um objeto usando um iterador

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:

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()

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.

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()
}

À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()
}

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)
}

É 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()
}

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.

Voltar

Update