Docs Menu
Docs Home
/ /
SDK de Java

CRUD - Java SDK

Puedes crear, actualizar y, eventualmente, eliminar objetos de un reino. Dado que estas operaciones modifican el estado del reino, las llamamos escrituras.

Realm gestiona las escrituras en términos de transacciones. Una transacción es una lista de operaciones de lectura y escritura que Realm trata como una sola operación indivisible. En otras palabras, una transacción es todo o nada: o todas las operaciones de la transacción se realizan correctamente o ninguna de ellas surte efecto.

Nota

Todas las escrituras deben realizarse en una transacción.

Un realm permite solo una transacción de escritura abierta a la vez. Realm bloquea otros guardados en otros hilos hasta que la transacción abierta haya finalizado. Por consecuencia, no hay condiciones de competencia al leer valores del realm dentro de una transacción.

Cuando finalices tu transacción, Realm la confirma o la cancela:

  • Cuando Realm confirma una transacción, escribe todos los cambios en el disco. En el caso de los dominios sincronizados, Realm pone el cambio en cola para su sincronización con Atlas App Services.

  • Cuando Realm cancela una transacción de escritura o una operación en la transacción provoca un error, todos los cambios se descartan (o se "revierten").

Tip

Las escrituras de objetos Realm son escrituras de archivos.

Al crear, actualizar o eliminar un objeto de Realm, los cambios actualizan la representación de ese objeto en Realm y envían notificaciones a los oyentes suscritos. Por lo tanto, solo debe escribir en objetos de Realm cuando sea necesario para conservar los datos.

Importante

Lecturas y escrituras sincrónicas en el hilo de interfaz de usuario

De forma predeterminada, solo se puede leer o escribir en un dominio en el hilo de interfaz de usuario de la aplicación mediante transacciones asincrónicas. Es decir, solo se puede usar Realm métodos cuyo nombre termine con la palabra Async en el hilo principal de su aplicación Android a menos que permita explícitamente el uso de métodos sincrónicos.

Esta restricción existe en beneficio de los usuarios de tu aplicación: realizar operaciones de lectura y escritura en el hilo de la Interfaz de Usuario puede generar interacciones lentas o no respondidas en la Interfaz de Usuario, por lo que generalmente es mejor gestionar estas operaciones de manera asíncrona o en un hilo en segundo plano. Sin embargo, si tu aplicación requiere el uso de lecturas o escrituras de realm síncronas en el hilo de la IU, puedes permitir explícitamente el uso de métodos síncronos con las siguientes opciones SyncConfiguration:

SyncConfiguration config = new SyncConfiguration.Builder(app.currentUser(), PARTITION)
.allowQueriesOnUiThread(true)
.allowWritesOnUiThread(true)
.build();
Realm.getInstanceAsync(config, new Realm.Callback() {
@Override
public void onSuccess(Realm realm) {
Log.v(
"EXAMPLE",
"Successfully opened a realm with reads and writes allowed on the UI thread."
);
}
});
val config = SyncConfiguration.Builder(app.currentUser(), PARTITION)
.allowQueriesOnUiThread(true)
.allowWritesOnUiThread(true)
.build()
Realm.getInstanceAsync(config, object : Realm.Callback() {
override fun onSuccess(realm: Realm) {
Log.v("EXAMPLE", "Successfully opened a realm with reads and writes allowed on the UI thread.")
}
})

Losobjetos administrados son objetos activos de Realm que se actualizan según los cambios en los datos subyacentes de Realm. Solo pueden provenir de un dominio abierto y reciben actualizaciones mientras este permanezca abierto. No se pueden transferir entre subprocesos.

Los objetos no administrados son instancias de objetos de Realm que no están activos. Puede obtener un objeto no administrado construyendo manualmente un objeto de Realm o llamando a Realm.copyFromRealm(). Se pueden transferir objetos no administrados entre subprocesos.

Realm representa cada transacción como una función de devolución de llamada que contiene cero o más operaciones de lectura y escritura. Para ejecutar una transacción, defina una devolución de llamada de transacción y pásela al método write del reino. Dentro de esta devolución de llamada, puede crear, leer, actualizar y eliminar datos en el reino. Si el código de la devolución de llamada genera una excepción al ejecutarla, Realm cancela la transacción. De lo contrario, Realm confirma la transacción inmediatamente después de la devolución de llamada.

Ejemplo

El siguiente código muestra cómo ejecutar una transacción con executeTransaction() o executeTransactionAsync(). Si el código de la devolución de llamada genera una excepción, Realm cancela la transacción. De lo contrario, la confirma.

realm.executeTransaction(r -> {
// Create a turtle enthusiast named Ali.
TurtleEnthusiast ali = r.createObject(TurtleEnthusiast.class, new ObjectId());
ali.setName("Ali");
// Find turtles younger than 2 years old
RealmResults<Turtle> hatchlings = r.where(Turtle.class).lessThan("age", 2).findAll();
// Give all hatchlings to Ali.
hatchlings.setObject("owner", ali);
});
realm.executeTransaction { r: Realm ->
// Create a turtle enthusiast named Ali.
val ali = r.createObject(TurtleEnthusiast::class.java, ObjectId())
ali.name = "Ali"
// Find turtles younger than 2 years old
val hatchlings =
r.where(Turtle::class.java).lessThan("age", 2).findAll()
// Give all hatchlings to Ali.
hatchlings.setObject("owner", ali)
}

Volver

Objetos incrustados

En esta página