Menu Docs
Página inicial do Docs
/ /
Atlas Device SDKs
/ / /

Anotações da propriedade - Kotlin SDK

Nesta página

  • Especificar uma chave primária
  • Mapear uma propriedade ou classe para um nome diferente
  • Ignorar propriedades do esquema do Realm
  • Propriedades do índice
  • Índices de pesquisa de texto completo

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.

The Kotlin SDK provides several property annotations that add functionality to Realm object properties. Refer also to the Annotations API reference.

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 {
@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
}

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:

@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.

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:

  1. Use a anotação @PersistedName na classe ou propriedade Kotlin.

  2. 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:

@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

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:

@PersistedName("latin_name")
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.

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 :

@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.

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:

@Index
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.

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:

@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).

Voltar

Tipos de dados suportados

Próximo

Relacionamentos