Tipo de anotação LinkingObjects


  • @Retention(RUNTIME)
    @Target(FIELD)
    public @interface LinkingObjects
    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)
       \@LinkingObjects("dog")
       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 query propriedade do proprietário do cão sem ter que manter manualmente um campo "proprietário" na classe `Dog'.

    Objetos de vinculação têm as seguintes propriedades:

    • 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 foi definida como: public class DogLover extends RealmObject { String name; List<Dog> dogs = new ArrayList<Dog>; } , o código a seguir será executado sem erro 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 para obter mais informações.

    • Resumo do elemento opcional

      Elementos opcionais 
      Modificador e tipo Elemento opcional Descrição
      String value
      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

        Valor da string
        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 IllegalArgumentException.
        Padrão:
        ""