我在coredata中有一个关系模式,我正试图将其迁移到realm,但怀疑是否可以在这里建立相同的模式。
class GrandParent: Object {
@Persisted(primaryKey: true) public var primaryId: ObjectId
@Persisted public var name: String
@Persisted public var dob: String
@Persisted public var children: List<Parent>
@Persisted public var grandChildren: List<Child>
}
class Parent: EmbeddedObject {
@Persisted public var name: String
@Persisted public var dob: String
@Persisted public var children: List<Child>
@Persisted(originProperty: "children") public var parents: LinkingObjects<GrandParent>
}
class Child: EmbeddedObject {
@Persisted public var name: String
@Persisted public var dob: String
@Persisted(originProperty: "grandChildren") public var grandParents: LinkingObjects<GrandParent>
}
我使用了这种模式,这样我就不需要在每次想知道祖父母的孙子时都遍历Parent对象了。正如领域文档所述,'嵌入式对象作为嵌套数据存在于单个特定父对象中。',
是否可以在祖类和父类中都有子类列表?
1.如果可能,是否在删除祖父母或父父母时级联删除子列表?
1.如果是不可能,什么是实现这种模式的正确方法?
1条答案
按热度按时间vecaoik11#
嵌入对象是父对象的“一部分”,不存在于该对象之外。
因此,对1)是,删除祖父母也会删除其列表中的父对象和子对象。
嵌入对象作为嵌套数据存在于单个特定父对象中。它继承其父对象的生命周期,不能作为独立的领域对象存在。如果父对象被删除或被新的嵌入对象示例覆盖,领域会自动删除嵌入对象。
领域对嵌入式对象使用级联删除删除删除领域对象时,该对象引用的所有嵌入式对象也将随之删除。
这里的一个潜在问题是,从祖父母列表属性来看,从孩子到他们的父母没有反向关系。换句话说,如果你有一个祖父母孙子,你将不知道他们的父母是谁。
需要记住的是,嵌入式对象不能单独查询;它们必须通过点标记法通过父对象来查询。2所以将LinkingObjects添加到一个嵌入对象中可能没有任何作用,因为无论如何你必须知道父对象才能到达那些对象。
我建议将Parent和Child对象设置为托管对象,并通过孙子的祖父-〉父对象访问孙子
您甚至可以考虑使用一个类来处理所有这些问题,类似于以下内容: