注释类型 LinkingObjects
-
@Retention(RUNTIME) @Target(FIELD) public @interface LinkingObjects
用于定义从一个类到另一个类的反向关系的注解。 此注解只能添加到RealmResults
类型的字段中。要公开反向关系以供使用,请创建如下声明:
在上面的示例中,“Person”通过字段“dog”与“Dog”相关。 这又意味着“Dog”类和“Person”类之间存在隐式反向关系。 这种反向关系由用“@LinkingObject”注释的“RealmResults”字段公开并可查询。 这样就可以查询狗主人的属性,而无需在“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();
链接对象具有以下属性:
- 该链接由 Realm 维护,仅适用于托管对象。
- 可以像查询普通关系一样查询它们。
- 可以像正常关系一样关注它们。
- 在执行“copyToRealm()”时,它们会被忽略。
- 在执行“copyFromRealm()”时,它们会被忽略。
- 在使用各种“createObjectFromJson*”和“createAllFromJson*”方法时,它们会被忽略。
- 如果链接对象发生变化,则不会触发具有“@LinkingObject”字段的对象上的监听器,例如,如果另一个对象删除了对该对象的引用。
此外,它们还有以下限制:
- @Ignore 优先。 @Ignore 字段上的 @LinkingObjects 注解将被忽略。
- 带注解的字段不能为 @Required。
- 带注释的字段必须是“final”。
- 注释参数(反向链接字段的名称)是必填项。
- 注解参数必须是简单的字段名称。 它不能包含句点(“.”)。
- 带注解的字段的类型必须为“RealmResults<T>”,其中 T 是扩展“RealmModel”的具体类。
public class DogLover extends RealmObject { String name; List<Dog> dogs = new ArrayList<Dog>; }
,则执行以下代码不会出现错误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)。 可以查询源类中的字段。这相当于链接查询。 请阅读以了解更多信息。
-
-
元素详细信息
-
值
字符串值
包含与包含此注解的类的实例的关系的字段的名称。如果未提供此参数,注释处理器将中止并返回IllegalArgumentException
。- 默认:
- ""
-
-