如何解决如何在 ObjectBox 中存储标准组合类? 第一种选择 - 使用 ToMany第二种选择 - 使用带有反向链接的 ToOne
我有A类包含B类列表,包含C类列表 那么我将如何在 ObjectBox 中实现这一目标?我如何存储它?
在下面的图片中你可以看到我有 BasicInfo Class
包含 Data class
等等....
我在 BasicInfo class
上添加了 @Entinty 注释,但在生成模型后 class D
没有显示在
objectBox.g.dart
文件,因为它属于 BasicInfo 属性
ModelEntity(
id: const IdUid(1,3501283007979667013),name: 'BasicInfo',lastPropertyId: const IdUid(1,2073579066569957521),flags: 0,properties: <ModelProperty>[
ModelProperty(
id: const IdUid(1,name: 'id',type: 6,flags: 1)
],relations: <ModelRelation>[],backlinks: <ModelBacklink>[])
解决方法
如果您说 Class A
contains 一个 List of Class B
,那么它们的关系不是子类/超类,而是标准组合。我知道你的定义有点像这样:
class A {
List<B> bs;
}
class B {
List<C> cs;
}
class C {}
为了在 ObjectBox 中使用它,您可以将它们定义为 relations,或者是独立的 ToMany
关系,或者是带有反向链接的 ToOne
关系 - 取决于更好的描述您的数据,您可以通过两者实现相同的效果。
第一种选择 - 使用 ToMany
ToMany
关系将信息存储在一个单独的 ID“表”中,例如:A.id <--> B.id
和 B.id <--> C.id
之间的另一个。
@Entity()
class A {
int id;
final bs = ToMany<B>();
}
@Entity()
class B {
int id;
final cs = ToMany<C>;
}
@Entity()
class C {
int id;
}
第二种选择 - 使用带有反向链接的 ToOne
ToOne
关系可以在您的情况下实现相同的效果,并且相关信息实际上作为单个 ID 存储在对象本身上,即有一个隐藏的 int B.classAId
字段,您可以获得所有 {{ 1}} 为类 Bs
实例,通过查找指向此 A
的那些 Bs
。这是由带有 A
注释的 ToMany<>
在幕后完成的。
Backlink()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。