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

Tipo de anotação LinkingObjects

Nesta página

  • io.realm.annotations
  • Resumo do elemento opcional
  • Detalhes do elemento

Interfaces implementadas:

  • java.lang.annotation.Annotation

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

para mais informações .

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

public 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. Se este argumento não for fornecido, o processador de anotações será interrompido com um IllegalArgumentException .

Padrão: ""

Voltar

Index