Docs Menu
Docs Home
/ /
Datos del modelo

Anotaciones de la propiedad - Kotlin SDK

En esta página se describen las anotaciones disponibles que puedes usar para personalizar el comportamiento de las propiedades en tus modelos de objetos. Para obtener más información sobre cómo definir tu modelo de objetos, consulta Definir un Modelo de objeto Realm - Kotlin SDK.

El SDK de Kotlin proporciona varias anotaciones de propiedades que añaden funcionalidad a las propiedades de los objetos Realm. Consulte también Referencia de API de anotaciones.

Nota

Declaraciones de propiedad

En Kotlin, los tipos de valor son implícitamente no nulos. Puedes declarar propiedades opcionales (nulos) usando la función integrada ? Operador de Kotlin. También puede asignar un valor predeterminado a una propiedad en su declaración. Consulte la lista de tipos de datos admitidos para ver ejemplos.

Los ejemplos de esta página se refieren a la siguiente clase Frog:

class Frog : RealmObject {
@PrimaryKey
var _id: ObjectId = ObjectId() // Primary key property
@Index
var name: String = "" // Indexed property
@Ignore
var age: Int = 0 // Ignored property
@PersistedName("latin_name")
var species: String? = null // Remapped property
@FullText
var physicalDescription: String? = null // Full-text search indexed property
}

Una clave principal es un identificador único para un objeto en un dominio. Ningún otro objeto del mismo tipo puede compartir la clave principal de un objeto.

Para especificar una propiedad como clave principal del tipo de objeto, utilice la anotación @PrimaryKey:

@PrimaryKey
var _id: ObjectId = ObjectId() // Primary key property

Aspectos importantes de las claves primarias:

  • Puede definir solo una clave principal por esquema de objeto.

  • No es posible cambiar el campo de clave principal de un tipo de objeto después de agregar cualquier objeto de ese tipo a un reino.

  • Los valores de clave principal deben ser únicos en todas las instancias de un objeto en un dominio. Intentar insertar un valor de clave principal duplicado genera un error.

  • Los valores de la llave primaria son inmutables. Para cambiar el valor de la clave primaria de un objeto, se debe borrar el objeto original e insertar uno nuevo con un valor de clave primaria diferente.

  • Las claves primarias admiten valores nulos. Dado que los valores de clave primaria deben ser únicos, null solo puede ser la clave primaria de un objeto en una colección.

  • Realm indexa automáticamente las claves principales, de modo que usted puede leer y modificar objetos de manera eficiente en función de su clave principal.

Puede crear una clave principal con cualquiera de los siguientes tipos:

  • String

  • Byte

  • Char

  • Short

  • Int

  • Long

  • ObjectId

  • RealmUUID

Importante

Device Sync requiere un campo llave primaria _id.

Si utiliza Device Sync, sus modelos de objetos deben incluir un campo de clave principal _id denominado, que debe ser del String tipo, Int ObjectIdo.

Para obtener más información, consulte Datos del modelo con sincronización de dispositivos - Kotlin SDK.

Novedades en la 10.8.0 versión: Reasignar nombres de clases con @PersistedName

De forma predeterminada, Realm usa el nombre definido en la clase del modelo para representar internamente las clases y los campos. El SDK de Kotlin permite asignar el nombre de una propiedad o clase a un nombre persistente distinto del usado en el código. Persistir un nombre diferente en el realm es útil en algunos casos, como:

  • Para facilitar el trabajo en plataformas donde las convenciones de nomenclatura difieren. Por ejemplo, si los nombres de las propiedades del esquema de sincronización de dispositivos usan mayúsculas y minúsculas, mientras que el proyecto usa mayúsculas y minúsculas.

  • Para cambiar un nombre de clase o campo en Kotlin sin forzar una migración.

  • Para admitir múltiples clases de modelos con el mismo nombre simple en diferentes paquetes.

  • Para utilizar un nombre de clase que sea más largo que el límite de 57caracteres impuesto por Realm.

Para asignar un nombre de propiedad o clase Kotlin en su código a un nombre diferente para que persista en un reino:

  1. Utiliza la anotación @PersistedName en la clase o propiedad de Kotlin.

  2. Especifique una clase o propiedad name que desea que persista en el reino.

En este ejemplo, Frog es el nombre de la clase Kotlin utilizado en el código en todo el proyecto para realizar operaciones CRUD, y Frog_Entity es el nombre persistente que se utiliza para almacenar objetos en un reino:

@PersistedName(name = "Frog_Entity") // Remapped class name
class Frog : RealmObject {
@PrimaryKey
var _id: ObjectId = ObjectId()
var name: String = ""
var age: Int = 0
var species: String? = null
var owner: String? = null
}

Importante

Consultas por nombres de clases reasignados

Al consultar una relación inversa en un objeto con un nombre de clase reasignado, debe usar el nombre de clase persistente. En el ejemplo anterior, debe consultar en Frog_Entity lugar Frog de. Para obtener más información, consulte Consultar relaciones inversas.

En este ejemplo, species es el nombre de la propiedad Kotlin utilizado en el código en todo el proyecto para realizar operaciones CRUD y latin_name es el nombre persistente utilizado para almacenar valores en un reino:

@PersistedName("latin_name")
var species: String? = null // Remapped property

Tip

Consulta por nombres de propiedades reasignados

Puedes consultar tanto por el nombre Kotlin usado en el código como por el nombre persistente almacenado en un dominio. Para más información, consulta :ref:``

Si escribe en un dominio sincronizado, el esquema de sincronización ve los valores almacenados con el nombre de la clase o propiedad persistente. Tenga en cuenta lo siguiente:

  • Las migraciones deben utilizar el nombre de la propiedad o clase persistente.

  • Cualquier error de esquema reportado utiliza el nombre almacenado.

De forma predeterminada, Realm administra las propiedades definidas en su modelo de objetos. Sin embargo, puede ignorar las propiedades que no desee que persistan en un dominio.

Para ignorar una propiedad y evitar que persista en un reino, use la anotación @Ignore:

@Ignore
var age: Int = 0 // Ignored property

Una propiedad ignorada se comporta exactamente igual que una propiedad administrada, excepto que no se almacena en la base de datos, no se puede usar en consultas ni activa notificaciones de Realm. Se pueden combinar propiedades administradas e ignoradas dentro de una clase.

Losíndices son estructuras de datos especiales que almacenan una pequeña porción de los datos de un dominio de forma fácil de navegar. Los índices facilitan la ejecución de consultas en un dominio. Cuando existe un índice adecuado para una consulta, Realm lo utiliza para limitar el número de documentos que debe inspeccionar. De lo contrario, Realm debe analizar todos los documentos de una colección y seleccionar los que coinciden con la consulta.

El índice almacena el valor de un campo específico, ordenado por su valor. El orden de las entradas del índice permite coincidencias de igualdad eficientes y operaciones de consulta basadas en rangos. Si bien los índices aceleran algunas consultas, también ralentizan ligeramente las escrituras. Implican una sobrecarga de almacenamiento y memoria adicional. Realm almacena los índices en disco, lo que aumenta el tamaño de los archivos de realm. Cada entrada de índice tiene un mínimo de 12 bytes.

Para crear un índice en una propiedad, utilice la anotación @Index en la propiedad:

@Index
var name: String = "" // Indexed property

Nota

Las llaves primarias están indexadas por defecto.

Puede indexar campos con los siguientes tipos:

  • String

  • Byte

  • Short

  • Int

  • Long

  • Boolean

  • RealmInstant

  • ObjectId

  • RealmUUID

No se pueden combinar índices estándar con índices de búsqueda de texto completo (FTS) en la misma propiedad. Para crear un índice FTS en una propiedad, consulte la sección Índices de búsqueda de texto completo.

Además de los índices estándar, Realm también admite índices de texto completo (FTS) en String propiedades. Aunque es posible query un campo de string con o sin un índice estándar, un índice FTS permite buscar varias palabras y frases y excluir otras.

Para crear un índice FTS en una propiedad, utilice la anotación @FullText:

@FullText
var physicalDescription: String? = null // Full-text search indexed property

Toma en cuenta las siguientes restricciones sobre los índices de texto completo:

  • Sólo se puede crear un índice FTS en propiedades de tipo String.

  • No se pueden combinar índices FTS e índices estándar en la misma propiedad. Para crear un índice estándar en una propiedad, consulte la sección Propiedades del índice.

Nota

Limitaciones de caracteres para índices de búsqueda de texto completo

En los índices de búsqueda de texto completo (FTS), solo se incluyen en el índice caracteres alfanuméricos ASCII y latinos-1 (la mayoría de los idiomas occidentales).

Los índices no distinguen entre mayúsculas y minúsculas ni entre signos diacríticos.

Para obtener más información sobre cómo consultar índices de texto completo, consulte la propiedad Filtrar por búsqueda de texto completo (FTS).

Volver

Tipos de datos admitidos

En esta página