在非托管的RealmObject中获取@LinkingObjects反向链接?

时间:2017-06-25 02:07:08

标签: android realm

使用新的3.4.0领域版本,我们可以通过@LinkingObject获得自动回复链接,但是,有没有办法让这些反向链接处于非托管状态?反向链接领域结果是空的

1 个答案:

答案 0 :(得分:0)

考虑到您需要将反向链接定义为

@LinkingObjects("linkingObjectsField")
private final RealmResults<OtherObject> backlink = null;

并且realm.copyFromRealm()忽略反向链接,非托管对象不能设置反向链接字段。通常,您不需要访问分离对象中的反向链接。

所以可能的解决方法是

@LinkingObjects("linkingObjectsField")
private final RealmResults<OtherObject> backlink = null;

@Ignore
private List<OtherObject> unmanagedBacklink = Collections.emptyList();

public <T extends List<OtherObject>> T getBacklinkObjects() {
    if(isManaged()) {
        // noinspection unchecked
        return (T)backlink; // <-- so that this can be obtained as RealmResults<T>
    } else {
        // noinspection unchecked
        return (T)unmanagedBacklink;
    }
}

您可以在realm.copyFromRealm(obj.getBacklink());的托管实例上手动复制obj的反向链接。

或者只是使用托管对象,考虑到我没有看到需要非托管反向链接的用例(除了可能通过GSON发送它们,但即便如此,我通常建议使用显式DTO类)。