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

Dados do modelo - SDK Java

Nesta página

  • Aplicativos Realm
  • Relacionamentos
  • Objetos reais
  • RealmProxy
  • Limitações do Objeto de Realm
  • Construções incrementais
  • Versão do esquema
  • Migrações

Observação

Novas aplicações Java SDK não podem usar RealmAny

Os novos aplicativos App Services não poderão sincronizar modelos de dados com propriedades do tipo RealmAny.

Um esquema de objetos é um objeto de configuração que define o campo e o relacionamento de um Tipo de objeto de Realm. Os aplicativos Android Realm definem esquemas de objeto com classes Java ou Kotlin usando o Realm Schemas.

Os esquemas de objeto especificam restrições em campos de objeto, como o tipo de dados de cada campo, se um campo é obrigatório e os valores de campo padrão. Os esquemas também podem definir relacionamentos entre tipos de objetos em um domínio.

A modificação do Realm Schema do aplicativo exige que você migre dados de versões mais antigas do Realm Schema para a nova versão.

Cada aplicação tem um Realm Schema composto por uma lista de esquemas de objetos para cada tipo de objeto que os realms desse aplicativo podem conter.

O domínio garante que todos os objetos em um domínio estejam em conformidade com o esquema do seu tipo de objeto e valida os objetos sempre que eles são criados, modificados ou excluídos.

Os aplicativos que usam o Atlas Device Sync podem definir esquemas de duas maneiras:

Você pode modelar relacionamentos um a um no Realm com campos RealmObject . Você pode modelar campos RealmList de relacionamentos um-para-muitos e muitos-para-um . Relacionamentos inversos são o lado oposto de um relacionamento um-para-muitos ou muitos-para-um . Você pode tornar relações inversas transitáveis com a anotação @LinkingObjects em um campo RealmResults . Em uma instância de um RealmObject, os campos de relacionamento inversos contêm o conjunto de objetos de Realm que ponto para essa instância de objeto por meio do relacionamento descrito. Você pode encontrar o mesmo conjunto de objetos Realm com uma query manual, mas o campo de relacionamento inversa reduz o código de query clichê e a capacidade de erro.

Ao contrário dos objetos Java normais, que contêm seus próprios dados, um objeto Realm não contém dados. Em vez disso, Objeto de Realm leem e gravam propriedade diretamente no Realm.

As instâncias de Objeto de Realm podem ser managed ou não gerenciadas.

  • Os objetos gerenciados são:

    • persistente no Realm

    • sempre atualizado

    • Confinado por thread

    • geralmente mais leves do que a versão não gerenciada, pois ocupam menos espaço na heap do Java.

  • Objetos não gerenciados são como objetos Java comuns, pois não são persistentes e nunca são atualizados automaticamente. Você pode mover objetos não gerenciados livremente entre threads.

Você pode converter entre os dois estados usando realm.copyToRealm() e realm.copyFromRealm().

As classes RealmProxy são a maneira do Realm SDK de garantir que o Objeto de Realm não contenham quaisquer objeto. Em vez disso, o RealmProxy de cada classe acessa os dados diretamente no reconhecimento de data center.

Para cada classe de modelo em seu projeto, o processador de anotações do Realm gera uma classe RealmProxy correspondente. Essa classe estende sua classe de modelo e é retornada quando você chama Realm.createObject(). Em seu código, esse objeto funciona como sua classe de modelo.

Objetos de Realm:

  • não pode conter campos que utilizam os modificadores final ou volatile (exceto para campos de relação inversa ).

  • não pode estender nenhum objeto que não seja RealmObject .

  • deve conter um construtor vazio (se sua classe não incluir nenhum construtor, o construtor vazio gerado automaticamente será suficiente)

Limitações de nomenclatura:

  • Os nomes das classes não podem exceder 57 caracteres.

  • Os nomes das classes devem ser exclusivos dentro dos módulos do domínio

  • Os nomes dos campos não podem exceder 63 caracteres.

Limitações de tamanho:

  • String ou campos byte[] não podem exceder 16 MB.

Limitações de uso:

  • Como os objetos de Realm são ativos e podem mudar a qualquer momento, seu valor hashCode() pode mudar ao longo do tempo. Como resultado, você não deve utilizar instâncias do RealmObject como uma chave em qualquer mapa ou conjunto.

O transformado de bytecode usado pelo Realm oferece suporte a compilações incrementais, mas sua aplicação exige uma reconstrução completa ao adicionar ou remover o seguinte de um campo de Objeto de Realm:

  • uma anotação @Ignore

  • a palavra-chave static

  • a palavra-chave transient

Você pode executar uma reconstrução completa com Build > Clean Project e Build > Rebuild Project nestes casos.

Uma versão de esquema identifica o estado de um Realm Schema em um determinado momento. O Realm controla a versão do esquema de cada realm e o usa para mapear os objetos em cada realm para o esquema correto.

As versões de esquema são inteiros que você pode incluir na configuração do território quando você abre um domínio. Se um aplicativo cliente não especificar um número de versão quando abrir um domínio, o domínio assumirá como padrão a versão 0.

Importante

Incrementar versões monotonicamente

As migrações devem atualizar um realm para uma versão superior do esquema. O Realm exibe um erro se um aplicativo cliente abrir um realm com uma versão do esquema inferior à versão atual do realm ou se a versão do esquema especificada for igual à versão atual do realm, mas incluir esquemas de objetos diferentes.

Uma migração local é uma migração para um domínio que não é sincronizado automaticamente com outro domínio. As migrações locais têm acesso ao domínio schema, à versão e aos objetos existentes e definem a lógica que atualiza incrementalmente o domínio para sua nova versão do esquema. Para realizar uma migração local, você precisa especificar uma nova versão do esquema que seja superior à versão atual e fornecer uma função de migração ao abrir o domínio desatualizado.

Com o SDK, você pode atualizar os dados subjacentes para refletir as alterações de esquema usando migrações manuais. Durante essa migração manual, você pode definir propriedades novas e excluídas quando elas são adicionadas ou removidas do esquema. O esquema editável exposto por meio de um DynamicRealm fornece funções de conveniência para renomear campos. Isso lhe dá controle total sobre o comportamento dos seus dados durante migrações de esquemas complexos.

Dica

Migrações durante o desenvolvimento de aplicativos

Durante o desenvolvimento de um aplicativo, as classes RealmObject podem mudar com frequência. Você pode usar Realm.deleteRealm() para excluir o arquivo de banco de dados e eliminar a necessidade de escrever uma migração completa para testar os dados.

Voltar

Criptografar um Realm