Pacote io.realm.annotations
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 tipoRealmResults
.Para expor relacionamentos inversos para uso, crie uma declaração da seguinte maneira:
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'.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();
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'.
public class DogLover extends RealmObject { String name; List<Dog> dogs = new ArrayList<Dog>; }
, o código a seguir será executado sem erroDog 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 sernull
, 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.
-
-
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 umIllegalArgumentException
.- Padrão:
- ""
-
-