Docs 菜单
Docs 主页
/ /
Atlas Device SDKs
/ / /

注释类型 LinkingObjects

在此页面上

  • io.realm.annotations
  • 可选元素摘要
  • 元素详细信息

实现的接口:

  • java.lang.annotation.Annotation

用于定义从一个类到另一个类的反向关系的注解。 此注解只能添加到 RealmResults类型的字段中。

要公开反向关系以供使用,请创建如下声明:

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();

在上面的示例中,“Person”通过字段“dog”与“Dog”相关。 这又意味着“Dog”类和“Person”类之间存在隐式反向关系。 这种反向关系由用“@LinkingObject”注释的“RealmResults”字段公开并可查询。 这样就可以查询狗主人的属性,而无需在“Dog”类中手动维护“所有者”字段。链接对象具有以下属性:

  • 该链接由 Realm 维护,仅适用于托管对象。

  • 可以像查询普通关系一样查询它们。

  • 可以像正常关系一样关注它们。

  • 在执行“copyToRealm()”时,它们会被忽略。

  • 在执行“copyFromRealm()”时,它们会被忽略。

  • 在使用各种“createObjectFromJson*”和“createAllFromJson*”方法时,它们会被忽略。

  • 如果链接对象发生变化,则不会触发具有“@LinkingObject”字段的对象上的监听器,例如,如果另一个对象删除了对该对象的引用。

此外,它们还有以下限制:

  • @Ignore 优先。 @Ignore 字段上的 @LinkingObjects 注解将被忽略。

  • 带注解的字段不能为 @Required。

  • 带注释的字段必须是“final”。

  • 注释参数(反向链接字段的名称)是必填项。

  • 注解参数必须是简单的字段名称。 它不能包含句点(“.”)。

  • 带注解的字段的类型必须为“RealmResults<T>”,其中 T 是扩展“RealmModel”的具体类。

请注意,当反向引用的来源(上例中为“dog”)是“List”时,每个正向引用都有一个反向引用,即使两个正向引用指向同一对象。 如果上面的“Person”类定义为:

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;

查询反向关系就像查询任何RealmResults 。 这意味着反向关系不能为null ,但可以为空(长度为 0)。 可以查询源类中的字段。这相当于链接查询。 请阅读

以了解更多信息

修饰符和类型
可选元素和描述
公共string
包含与包含此注解的类的实例的关系的字段的名称。

public String value

包含与包含此注解的类的实例的关系的字段的名称。 如果未提供此参数,注释处理器将中止并返回IllegalArgumentException

默认: ""

后退

Index