【问题标题】:Realm deleteAllFromRealm with Nested Objects具有嵌套对象的领域 deleteAllFromRealm
【发布时间】:2017-11-30 09:42:33
【问题描述】:

我有一个主对象,它的嵌套对象都是从 RealmObject 扩展而来的。 在使用主对象之前,我会存储所有嵌套对象。

删除带有这些嵌套对象的主对象后,我注意到嵌套对象仍被存储,但无法通过“equalTo()”方法使用它们的主键选择。

我用

过滤 nObject2
realm.where(nObject2.class).equalTo("nObject1.Oid",givenOid).findAll()

作为用户选择的 RealmResults。如果尚未删除任何 mObject,则结果是正确的。但是如果一个 mObject 被删除,相关的 nObject2 不会在下次给定nObject1.Oid 的结果中列出。

我通过copyToRealmOrUpdate()insertOrUpdate() 存储了所有这些对象,并且没有任何更改并通过mObject RealmResults.deleteAllFromRealm() 全部删除

嵌套对象1;

 public class nObject1 extends RealmObject implements Serializable {

            private Date LastModifiedOn;
            private String LastModifiedBy;
            private Date CreatedOn;
            private String CreatedBy;
            @PrimaryKey
            private String Oid;

    //getters and setters
    }

嵌套对象2;

public class nObject2 extends RealmObject implements Serializable {
        private nObject1 nObject1;   
        private Date LastModifiedOn;
        private String LastModifiedBy;
        private Date CreatedOn;
        private String CreatedBy;
        @PrimaryKey
        private String Oid;

//getters and setters
}

和主对象;

public class mObject extends RealmObject implements Serializable {
        private nObject1 nObject1; 
        private nObject2 nObject2; 
        private Date LastModifiedOn;
        private String LastModifiedBy;
        private Date CreatedOn;
        private String CreatedBy;
        @PrimaryKey
        private String Oid;

//getters and setters
}

【问题讨论】:

    标签: java android database realm


    【解决方案1】:

    "nObject1.Oid"nObject2nObject1 字段中创建一个链接查询。这意味着您正在寻找nObject1Oid

    如果nObject1Oid被删除,那么显然找不到了。

    如果您尝试使用自己的Oid 查找nObject2,那么您应该只使用.equalTo("Oid"

    如果您尝试使用nObject1Oid 查找nObject2,即使nObject1 被单独删除,那么也要将该oid 作为nObject2 的一部分存储在其架构中,例如@Index private String nObject1Oid并据此查询。

    【讨论】:

    • 谢谢。我从不删除 nObject1 或 nObject2。我只删除masterObject。在我删除主对象之前,我可以找到带有 nObject1.Oid 的 nObject2,但是在删除 masterObject 之后我找不到。在这个删除点,我想避免在领域中操作相关的嵌套对象。您写的关于将 nObject1Oid 索引为字符串的最后一段是一个解决方案,但我的项目不仅包括 3 个对象,而且还有更深层次的嵌套对象类。可能我对领域有误解,我的目标是修复它。
    • 你是如何删除mObject的?
    • if (!baseRealm.isInTransaction()) { baseRealm.beginTransaction(); } baseRealm.where(mObject.class).notEqualTo("TransactionState.isSynchronized",false).findAll().deleteAllFromRealm(); baseRealm.commitTransaction();
    • ....就这样?这不应该使object1object2 之间的链接失效。 O_o 这是什么Realm版本?
    • 版本为 3.7.0;我的整个方法是这样的: if (!baseRealm.isInTransaction()) { baseRealm.beginTransaction(); baseRealm.where(mObject.class).notEqualTo("TransactionState.isSynchronized",false).findAll().deleteAllFromRealm(); for (int i = 0; i
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多