注释类型 LinkingObjects
io.realm.annotations
实现的接口:
用于定义从一个类到另一个类的反向关系的注解。 此注解只能添加到 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) 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 | 包含与包含此注解的类的实例的关系的字段的名称。 |
元素详细信息
值 |
---|
包含与包含此注解的类的实例的关系的字段的名称。 如果未提供此参数,注释处理器将中止并返回 默认:
|