@Retention(value=SOURCE) @Target(value=FIELD) public @interface LinkingObjects
RealmResults
.
To expose reverse relationships for use, create a declaration as follows:
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();
In the above example `Person` is related to `Dog` through the field `dog`.
This in turn means that an implicit reverse relationship exists between the class `Dog`
and the class `Person`. This inverse relationship is made public and queryable by the `RealmResults`
field annotated with `@LinkingObject`. This makes it possible to query properties of the dogs owner
without having to manually maintain a "owner" field in the `Dog` class.
Linking objects have the following properties:
In addition, they have the following restrictions:
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;
public abstract String value
IllegalArgumentException
.