Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /
Java SDK

CRUD - Java SDK

You can create objects in a realm, update objects in a realm, and eventually delete objects from a realm. Because these operations modify the state of the realm, we call them writes.

Realm handles writes in terms of transactions. A transaction is a list of read and write operations that Realm treats as a single indivisible operation. In other words, a transaction is all or nothing: either all of the operations in the transaction succeed or none of the operations in the transaction take effect.

Nota

All writes must happen in a transaction.

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:

  • When Realm commits a transaction, Realm writes all changes to disk. For synced realms, Realm queues the change for synchronization with 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

Synchronous Reads and Writes on the UI Thread

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

Managed objects are live Realm objects that update based on changes to underlying data in Realm. Managed objects can only come from an open realm, and receive updates as long as that realm remains open. Managed objects cannot be passed between threads.

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 represents each transaction as a callback function that contains zero or more read and write operations. To run a transaction, define a transaction callback and pass it to the realm's write method. Within this callback, you are free to create, read, update, and delete on the realm. If the code in the callback throws an exception when Realm runs it, Realm cancels the transaction. Otherwise, Realm commits the transaction immediately after the callback.

Ejemplo

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

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

objeto incrustado

En esta página