如何在ObjectBox中存储标准构图类?
How to store standard composition Classes in ObjectBox?
我有 Class A 包含 List of Class B 包含 List Class 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, 2073579066569957521),
name: 'id',
type: 6,
flags: 1)
],
relations: <ModelRelation>[],
backlinks: <ModelBacklink>[])
如果你说Class A
包含一个List of Class B
,那么他们的关系不是subclass/superclass,而是一个标准的组合.我知道你的定义看起来有点像这样:
class A {
List<B> bs;
}
class B {
List<C> cs;
}
class C {}
为了在 ObjectBox 中使用它,您可以将它们定义为 relations,独立的 ToMany
关系,或带有反向链接的 ToOne
关系 - 取决于什么更好地描述您的数据,您可以用两者实现相同的效果。
第一个选择 - 使用 ToMany
ToMany
关系将信息存储在单独的“table”ID 中,例如:A.id <--> B.id
和 B.id <--> C.id
.
之间的另一个 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
字段,您可以获得所有Bs
class A
实例通过寻找那些 Bs
指向这个 A
。这是由带有 Backlink()
注释的 ToMany<>
在幕后完成的。
@Entity()
class A {
int id;
@Backlink()
final bs = ToMany<B>();
}
@Entity()
class B {
int id;
final a = ToOne<A>;
@Backlink()
final cs = ToMany<C>;
}
@Entity()
class C {
int id;
final b = ToOne<B>;
}
我有 Class A 包含 List of Class B 包含 List Class 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, 2073579066569957521),
name: 'id',
type: 6,
flags: 1)
],
relations: <ModelRelation>[],
backlinks: <ModelBacklink>[])
如果你说Class A
包含一个List of Class B
,那么他们的关系不是subclass/superclass,而是一个标准的组合.我知道你的定义看起来有点像这样:
class A {
List<B> bs;
}
class B {
List<C> cs;
}
class C {}
为了在 ObjectBox 中使用它,您可以将它们定义为 relations,独立的 ToMany
关系,或带有反向链接的 ToOne
关系 - 取决于什么更好地描述您的数据,您可以用两者实现相同的效果。
第一个选择 - 使用 ToMany
ToMany
关系将信息存储在单独的“table”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
字段,您可以获得所有Bs
class A
实例通过寻找那些 Bs
指向这个 A
。这是由带有 Backlink()
注释的 ToMany<>
在幕后完成的。
@Entity()
class A {
int id;
@Backlink()
final bs = ToMany<B>();
}
@Entity()
class B {
int id;
final a = ToOne<A>;
@Backlink()
final cs = ToMany<C>;
}
@Entity()
class C {
int id;
final b = ToOne<B>;
}