Docs Menu
Docs Home
/ /
SDK de Java

Datos del modelo - SDK de Java

Nota

Las nuevas aplicaciones SDK de Java no pueden usar RealmAny

Nuevo Servicios de aplicaciones Las aplicaciones no podrán sincronizar modelos de datos con propiedades de tipo RealmAny.

Un esquema de objeto es un objeto de configuración que define los campos y las relaciones de un tipo de objeto Realm. Las aplicaciones Android Realm definen esquemas de objeto con clases Java o Kotlin mediante esquemas Realm.

Los esquemas de objeto especifican restricciones sobre los campos de objeto, como el tipo de datos de cada campo, si un campo es obligatorio y sus valores predeterminados. Los esquemas también pueden definir relaciones entre los tipos de objeto de un dominio.

Para modificar el esquema de reino de su aplicación, es necesario migrar datos de versiones anteriores de su esquema de reino a la nueva versión.

Cada aplicación tiene un esquema de reino compuesto por una lista de esquemas de objetos para cada tipo de objeto que los reinos de esa aplicación puedan contener.

Realm garantiza que todos los objetos de un reino se ajusten al esquema para su tipo de objeto y valida los objetos cada vez que se crean, modifican o eliminan.

Las aplicaciones que utilizan Atlas Device Sync pueden definir esquemas de dos maneras:

Puede modelar relaciones uno a uno en realm con campos RealmObject. Puede modelar relaciones uno a muchos y muchos a uno con campos RealmList. Las relaciones inversas son el extremo opuesto de una relación uno a muchos o muchos a uno. Puede hacer que las relaciones inversas sean transitables con la anotación @LinkingObjects en un campo RealmResults. En una instancia RealmObject de, los campos de relación inversa contienen el conjunto de objetos Realm que apuntan a esa instancia de objeto a través de la relación descrita. Puede encontrar el mismo conjunto de objetos Realm con una consulta manual, pero el campo de relación inversa reduce el código de consulta repetitivo y la posibilidad de error.

A diferencia de los objetos Java normales, que contienen sus propios datos, un objeto Realm no contiene datos. En cambio, los objetos Realm leen y escriben propiedades directamente en Realm.

Las instancias de objetos Realm pueden ser administradas o no administradas.

  • Los objetos gestionados son:

    • persistió en el reino

    • siempre actualizado

    • confinado en hilo

    • Generalmente son más livianos que la versión no administrada, ya que ocupan menos espacio en el montón de Java.

  • Los objetos no administrados son como los objetos Java comunes, ya que no se conservan y nunca se actualizan automáticamente. Puedes moverlos libremente entre subprocesos.

Puede convertir entre los dos estados utilizando realm.copyToRealm() y realm.copyFromRealm().

Las clases RealmProxy son la forma en que el SDK de Realm garantiza que los objetos de Realm no contengan datos. En su lugar, el RealmProxy de cada clase accede directamente a los datos en la base de datos.

Para cada clase de modelo de tu proyecto, el procesador de anotaciones Realm genera una clase RealmProxy correspondiente. Esta clase extiende tu clase de modelo y se devuelve al llamar a Realm.createObject(). En tu código, este objeto funciona igual que tu clase de modelo.

Objetos del reino:

  • no puede contener campos que utilicen los final volatile modificadores o (excepto los campos de relación inversa).

  • no se puede extender ningún objeto que no sea RealmObject.

  • debe contener un constructor vacío (si su clase no incluye ningún constructor, el constructor vacío generado automáticamente será suficiente)

Limitaciones de nombres:

  • Los nombres de clase no pueden exceder 57 caracteres.

  • Los nombres de clase deben ser únicos dentro de los módulos del reino

  • Los nombres de campo no pueden exceder 63 caracteres.

Limitaciones de tamaño:

  • String o los campos byte[] no pueden exceder 16 MB.

Limitaciones de uso:

  • Dado que los objetos de Realm están activos y pueden cambiar en cualquier momento, su valor hashCode() puede variar con el tiempo. Por lo tanto, no se deben usar instancias RealmObject como clave en ningún mapa o conjunto.

El transformador de código de bytes utilizado por Realm admite compilaciones incrementales, pero su aplicación requiere una reconstrucción completa al agregar o eliminar lo siguiente de un campo de objeto de Realm:

  • una anotación @Ignore

  • la palabra clave static

  • la palabra clave transient

Puede realizar una reconstrucción completa con Build > Clean Project y Build > Rebuild Project en estos casos.

Una versión de esquema identifica el estado de un esquema de dominio en un momento dado. Dominio rastrea la versión de esquema de cada dominio y la utiliza para asignar los objetos de cada dominio al esquema correcto.

Las versiones del esquema son números enteros que se pueden incluir en la configuración del dominio al abrirlo. Si una aplicación cliente no especifica un número de versión al abrir un dominio, este se establece como 0 de forma predeterminada.

Importante

Incrementar versiones monótonamente

Las migraciones deben actualizar un realm a una versión de esquema superior. Realm arroja un error si una aplicación cliente abre un realm con una versión de esquema inferior a la versión actual del realm o si la versión de esquema especificada es la misma que la versión actual del realm pero incluye diferentes esquemas de objetos.

Una migración local es la migración de un dominio que no se sincroniza automáticamente con otro. Las migraciones locales tienen acceso al esquema, la versión y los objetos del dominio existentes, y definen la lógica que actualiza el dominio gradualmente a su nueva versión del esquema. Para realizar una migración local, debe especificar una nueva versión del esquema superior a la actual y proporcionar una función de migración al abrir el dominio obsoleto.

Con el SDK, puede actualizar los datos subyacentes para reflejar los cambios de esquema mediante migraciones manuales. Durante estas migraciones, puede definir propiedades nuevas y eliminadas al añadirlas o eliminarlas de su esquema. El esquema editable, expuesto mediante DynamicRealm, ofrece funciones prácticas para renombrar campos. Esto le proporciona control total sobre el comportamiento de sus datos durante migraciones de esquema complejas.

Tip

Migraciones durante el desarrollo de aplicaciones

Durante el desarrollo de una aplicación, lasRealmObject clases pueden cambiar con frecuencia. Puedes usar Realm.deleteRealm() para eliminar el archivo de base de datos y evitar la necesidad de una migración completa para probar los datos.

Volver

Cifrar un reino

En esta página