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.
Aplicaciones de Realm
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:
Esquemas de objetos utilizando declaraciones de clases Kotlin y Java con modo de desarrollo.
Esquemas de objetos JSON en el backend de su aplicación.
Relaciones
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.
Objetos del reino
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().
Proxy del reino
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.
Limitaciones de los objetos del reino
Objetos del reino:
no puede contener campos que utilicen los
finalvolatilemodificadores 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:
Stringo los camposbyte[]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 instanciasRealmObjectcomo clave en ningún mapa o conjunto.
Construcciones incrementales
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
@Ignorela palabra clave
staticla palabra clave
transient
Puede realizar una reconstrucción completa con Build > Clean Project y Build > Rebuild Project en estos casos.
Versión del esquema
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.
Migraciones
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.