Tipo de anotação LinkingObjects
io.realm.annotations
Interfaces implementadas:
Anotação para definir um relacionamento inverso de uma classe para outra. Esta anotação só pode ser adicionada a um campo do tipo RealmResults
.
Para expor relacionamentos inversos para uso, crie uma declaração da seguinte maneira:
public class Person extends RealmObject { String name; Dog dog; // Normal relation } public class Dog extends RealmObject { // This holds all Person objects with a relation to this Dog object (= linking objects) final RealmResults<Person> owners = null; } // Find all Dogs with at least one owner named John realm.where(Dog.class).equalTo("owners.name", "John").findAll();
No exemplo acima, 'Pessoa' está relacionado a 'Cão' através do campo 'Cão'. Isso, por sua vez, significa que existe um relacionamento inverso implícito entre a classe 'Dog' e a classe 'Person'. Esse relacionamento inverso é tornado público e consultável pelo campo 'RealmResults' anotado com '@LinkingObject'. Isso torna possível fazer query da propriedade do proprietário do cão sem ter que manter manualmente um campo "proprietário" na classe "Cão". Os objeto vinculados têm as seguintes propriedade:
O link é mantido pelo Realm e funciona apenas para objeto managed.
Eles podem ser query como uma relação normal.
Eles podem ser seguidos como uma relação normal.
Eles são ignorados ao fazer um `copyToRealm().'
Eles são ignorados ao fazer um `copyFromRealm().'
Eles são ignorados ao usar os vários métodos `createObjectFromJson*' e `createAllFromJson*'.
Os ouvintes em um objeto com um campo `@LinkingObject' não serão acionados se os objetos vinculados forem alterados, por exemplo: se outro objeto eliminar uma referência a esse objeto.
Além disso, elas têm as seguintes restrições:
@Ignore tem precedência. Uma anotação @LinkingObjects no campo @Ignore será ignorada.
O campo anotado não pode ser @Obrigatório.
O campo anotado deve ser "final".
O argumento de anotação (o nome do campo vinculado) é obrigatório.
O argumento de anotação deve ser um nome de campo simples. Não pode conter pontos ('.').
O campo anotado deve ser do tipo `RealmResults<T>' onde T é a classe sólida que estende o `RealmModel'.
Observe que, quando a origem da referência inversa ('dog' no caso acima) é uma 'Lista', há uma referência reversa para cada referência direta, mesmo que ambas as referências diretas sejam para o mesmo objeto. Se a classe "Pessoa" acima for definida como:
public class DogLover extends RealmObject { String name; List<Dog> dogs = new ArrayList<Dog>; } then the following code executes without error
Dog fido = new Dog(); DogLover john = new DogLover() john.dogs.add(fido); john.dogs.add(fido); assert john.dogs.size() == 2; assert fido.owners.size() == 2;
Consultar relacionamento inverso é como consultar qualquer RealmResults
. Isso significa que um relacionamento inverso não pode ser null
, mas pode estar vazio (o comprimento é 0). É possível consultar campos na classe de origem. Isso é equivalente a vincular query. Leia, por favor
Resumo do elemento opcional
Modificador e tipo | Elemento opcional e descrição |
---|---|
O nome de um campo que contém uma relação com uma instância da classe que contém esta anotação. |
Detalhes do elemento
valor |
---|
O nome de um campo que contém uma relação com uma instância da classe que contém esta anotação. Se este argumento não for fornecido, o processador de anotações será interrompido com um Padrão:
|