Anotações da propriedade - Kotlin SDK
Nesta página
Esta página descreve as anotações disponíveis que você pode usar para personalizar o comportamento das propriedades em seus modelos de objeto. Para obter mais informações sobre como definir seu modelo de objeto, consulte Definir um modelo de objeto de Realm - SDK Kotlin.
O Kotlin SDK fornece várias anotações de propriedade que adicionam funcionalidade às propriedades do Objeto de Realm . Consulte também areferência da API de Anotaçõesdo .
Observação
Declarações de propriedade
Em Kotlin, os tipos de valor são implicitamente não anuláveis. Você pode declarar propriedades opcionais (anuláveis) usando o operador Kotlin ?
integrado. Ou você pode atribuir um valor padrão a uma propriedade na declaração de propriedade. Consulte a Lista de tipos de dados suportados para obter exemplos.
Exemplos nesta página referem-se à seguinte classe Frog
:
class Frog : RealmObject { var _id: ObjectId = ObjectId() // Primary key property var name: String = "" // Indexed property var age: Int = 0 // Ignored property var species: String? = null // Remapped property var physicalDescription: String? = null // Full-text search indexed property }
Especificar uma chave primária
Uma chave primária é um identificador exclusivo para um objeto em um domínio. Nenhum outro objeto do mesmo tipo pode compartilhar a chave primária de um objeto.
Para especificar uma propriedade como chave primária do tipo de objeto, use a anotação @PrimaryKey:
var _id: ObjectId = ObjectId() // Primary key property
Aspectos importantes das chaves primárias:
Você pode definir apenas uma chave primária por esquema de objeto.
Não é possível alterar o campo de chave primária de um tipo de objeto depois de adicionar qualquer objeto desse tipo a um realm.
Os valores de chave primária devem ser únicos em todas as instâncias de um objeto em um realm. A tentativa de inserir um valor de chave primária duplicado resulta em um erro.
Os valores de chave primária são imutáveis. Para alterar o valor da chave primária de um objeto, você deve excluir o objeto original e inserir um novo objeto com um valor de chave primária diferente.
As chaves primárias são anuláveis. Como os valores de chave primária devem ser únicos,
null
só pode ser a chave primária de um objeto em uma coleção.O Realm indexa automaticamente as chaves primárias, para que você possa ler e modificar objetos de forma eficiente com base em suas chaves primárias.
Você pode criar uma chave primária com qualquer um dos seguintes tipos:
String
Byte
Char
Short
Int
Long
ObjectId
RealmUUID
Importante
A Device Sync requer um campo de chave primária _id
Se você utilizar a Device Sync, seus modelos de objeto devem incluir um campo de chave primária denominado _id
, que deve ser do tipo String
, Int
ou ObjectId
.
Para obter mais informações, consulte Modelar dados com Device Sync - Kotlin SDK.
Mapear uma propriedade ou classe para um nome diferente
Novidade na versão 10.8.0: Remapear nomes de classe com @PersistedName
Por padrão, o Realm utiliza o nome definido na classe de modelo para representar classes e campos internamente. O SDK Kotlin permite que você mapeie uma propriedade ou nome de classe para um nome persistente diferente do nome usado no seu código. A persistência de um nome diferente para o domínio é útil em alguns casos, incluindo:
Para facilitar o trabalho em plataformas onde as convenções de nomenclatura são diferentes. Por exemplo, se os nomes das propriedades do esquema Device Sync usarem snake case, enquanto seu projeto usa camel case.
Para alterar um nome de classe ou campo em Kotlin sem forçar uma migração.
Para oferecer suporte a várias classes de modelo com o mesmo nome simples em pacotes diferentes.
Para usar um nome de classe maior que o limite de 57 caracteres imposto pelo Realm.
Para mapear uma classe Kotlin ou nome de propriedade em seu código para um nome diferente para persistir em um domínio:
Use a anotação @PersistedName na classe ou propriedade Kotlin.
Especifique uma classe ou propriedade
name
que você deseja manter no domínio.
Neste exemplo, Frog
é o nome da classe Kotlin usada no código em todo o projeto para realizar operações CRUD, e Frog_Entity
é o nome persistente usado para armazenar objetos em um domínio:
// Remapped class name class Frog : RealmObject { var _id: ObjectId = ObjectId() var name: String = "" var age: Int = 0 var species: String? = null var owner: String? = null }
Importante
Consultando por nomes de classes remapeados
Ao fazer query de um relacionamento inverso em um objeto com um nome de classe remapeado, você deve usar o nome de classe persistente. No exemplo acima, você deve fazer query de Frog_Entity
em vez de Frog
. Para mais informações, consulte Query de relacionamentos inversos.
Neste exemplo, species
é o nome da propriedade Kotlin usado no código em todo o projeto para realizar operações CRUD e latin_name
é o nome persistente usado para armazenar valores em um domínio:
var species: String? = null // Remapped property
Dica
Consultando por nomes de propriedade remapeados
Você pode executar query pelo nome Kotlin usado no código e pelo nome persistente armazenado em um domínio. Para mais informações, consulte :ref:''
Se você gravar em um domínio sincronizado, o esquema Sync verá os valores armazenados usando a classe persistente ou o nome da propriedade. Observe o seguinte:
As migrações devem usar a classe persistente ou o nome da propriedade.
Quaisquer erros de esquema relatados usam o nome persistente.
Ignorar propriedades do esquema do Realm
Por padrão, o Realm gerencia propriedades definidas em seu modelo de objeto do Realm. No entanto, você pode optar por ignorar as propriedades que não deseja que persistam em uma região.
Para ignorar uma propriedade e impedir que ela persista em um domínio, use a anotação @Ignore :
var age: Int = 0 // Ignored property
Uma propriedade ignorada se comporta exatamente como uma propriedade gerenciada, exceto que não é armazenada no banco de dados, não pode ser usada em queries e não aciona notificações do Realm. Você pode misturar propriedades gerenciadas e ignoradas dentro de uma classe.
Propriedades do índice
Os índices são estruturas de dados especiais que armazenam uma pequena parte dos dados de um território em uma forma fácil de percorrer. Os índices suportam uma execução de query mais eficiente em um domínio. Quando existe um índice apropriado para uma query, o Realm usa o índice para limitar o número de documentos que ele deve inspecionar. Caso contrário, o Realm deve digitalizar todos os documentos em uma coleção e selecionar os documentos que correspondam a uma query.
O índice armazena o valor de um campo específico ordenado pelo valor do campo. A ordenação das entradas do índice suporta correspondências de igualdade eficientes e operações de query baseadas em intervalo. Enquanto os índices aceleram algumas queries, eles também causam gravações ligeiramente mais lentas. Eles vêm com armazenamento adicional e sobrecarga de memória. O Realm armazena índices no disco, o que torna seus arquivos de domínio maiores. Toda entrada do índice tem um mínimo de 12 bytes.
Para criar um índice em uma propriedade, use a anotação @Índice na propriedade:
var name: String = "" // Indexed property
Observação
As chaves primárias são indexadas por padrão.
Você pode indexar campos com os seguintes tipos:
String
Byte
Short
Int
Long
Boolean
RealmInstant
ObjectId
RealmUUID
Você não pode combinar índices padrão com índices de Full Text Search (FTS) na mesma propriedade. Para criar um índice FTS em uma propriedade, consulte a seção Índices de Full Text Search.
Índices de pesquisa de texto completo
Além dos índices padrão, o Realm também suporta índices de Pesquisa de Texto Completo (FTS) em propriedades do String
. Embora você possa executar uma query de um campo de string com ou sem um índice padrão, um índice FTS permite pesquisar várias palavras e frases e excluir outras.
Para criar um índice FTS em uma propriedade, use a anotação @FullText:
var physicalDescription: String? = null // Full-text search indexed property
Observe as seguintes restrições nos índices FTS:
Você só pode criar um índice FTS em propriedades do tipo
String
.Você não pode combinar índices FTS e índices padrão na mesma propriedade. Para criar um índice padrão em uma propriedade, consulte a seção Propriedades do Índice.
Observação
Limitações de caracteres para indexações de pesquisa de texto completo
Para índices FTS (Full-Text Search, Pesquisa de texto completo), somente caracteres alfanuméricos ASCII e Latin-1 (a maioria dos idiomas ocidentais) são incluídos no índice.
Os índices são diacríticos e não fazem distinção entre maiúsculas e minúsculas.
Para obter mais informações sobre como executar uma query de índices de texto completo, consulte Filtrar por propriedade Full-Text Search (FTS).