io.realm.anotaciones
Interfaces implementadas:
Anotación para definir una relación inversa entre clases. Esta anotación solo se puede añadir a un campo del tipo RealmResults .
Para exponer relaciones inversas para su uso, cree una declaración de la siguiente manera:
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();
En el ejemplo anterior, `Person` se relaciona con `Dog` mediante el campo `dog`. Esto, a su vez, implica que existe una relación inversa implícita entre las clases `Dog` y `Person`. Esta relación inversa se hace pública y consultable mediante el campo `RealmResults`, anotado con `@LinkingObject`. Esto permite consultar las propiedades del propietario del perro sin tener que mantener manualmente un campo "owner" en la clase `Dog`. Los objetos de enlace tienen las siguientes propiedades:
El enlace lo mantiene Realm y solo funciona para objetos administrados.
Se pueden consultar como una relación normal.
Se pueden seguir como una relación normal.
Se ignoran cuando se realiza un `copyToRealm().`
Se ignoran cuando se realiza un `copyFromRealm().`
Se ignoran cuando se utilizan los distintos métodos `createObjectFromJson*` y `createAllFromJson*`.
Los oyentes de un objeto con un campo `@LinkingObject` no se activarán si los objetos de enlace cambian, por ejemplo: si otro objeto elimina una referencia a este objeto.
Además, tienen las siguientes restricciones:
@Ignore tiene prioridad. Una anotación @LinkingObjects en el campo @Ignore se ignorará.
El campo anotado no puede ser @Required.
El campo anotado debe ser "final".
Se requiere el argumento de anotación (el nombre del campo con vínculo retroactivo).
El argumento de anotación debe ser un nombre de campo simple. No puede contener puntos ('.').
El campo anotado debe ser del tipo `RealmResults<T>` donde T es la clase concreta que extiende `RealmModel`.
Tenga en cuenta que cuando el origen de la referencia inversa (`perro` en el caso anterior) es una `Lista`, existe una referencia inversa para cada referencia directa, incluso si ambas referencias directas son al mismo objeto. Si la clase `Persona` anterior se definiera 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 una relación inversa es como consultar cualquier RealmResults . Esto significa que una relación inversa no puede ser null, pero puede estar vacía (longitud 0). Es posible consultar campos en la clase fuente. Esto es equivalente a las consultas de enlace. Lea
Para más información.
Resumen de elementos opcionales
Modificador y Tipo | Elemento opcional y descripción |
|---|---|
El nombre de un campo que contiene una relación con una instancia de la clase que contiene esta anotación. |
Detalle del elemento
valor |
|---|
El nombre de un campo que contiene una relación con una instancia de la clase que contiene esta anotación. Si no se proporciona este argumento, el procesador de anotaciones abortará la operación con un Por defecto:
|