为什么在 objectbox-dart 中不允许带有反向链接的多对一?
Why many to one with backlink not allowed in objectbox-dart?
我有这样的结构:
@JsonSerializable()
class Media {
@Id(assignable: true)
int id = 0;
int lid = 0;
String url = '';
String? title;
}
@Entity()
class NewsPicture extends Media {
@override
@Id(assignable: true)
int id = 0;
@Backlink('newsPicture')
final news = ToOne<News>();
}
@JsonSerializable(explicitToJson: true)
@Entity()
class News extends Data<News> implements DataInterface<News> {
@Id(assignable: true)
@JsonKey(defaultValue: 0)
int lid = 0;
final Picture = ToMany<NewsPicture>();
}
在生成过程中,objectbox_generator:resolver 给我这个错误信息:
invalid use of @Backlink() annotation - may only be used on a ToMany<>
field
为什么不允许?我错过了什么?
在那个方向上不支持,因为它不是真正需要的(对任何事情都没有帮助),你可以只翻转 direction/change 存储关系的地方。此外,ToOne
关系的存储效率更高,因为它们只是数据库中的单个字段,而独立的 ToMany
关系需要中间“映射 table”。
如果您像这样更新您的模型,它将正常工作,并且您在应用程序中使用它的方式不会有任何不同:
@Entity()
class NewsPicture extends Media {
@override
@Id(assignable: true)
int id = 0;
final news = ToOne<News>();
}
@JsonSerializable(explicitToJson: true)
@Entity()
class News extends Data<News> implements DataInterface<News> {
@Id(assignable: true)
@JsonKey(defaultValue: 0)
int lid = 0;
@Backlink()
final Picture = ToMany<NewsPicture>();
}
我有这样的结构:
@JsonSerializable()
class Media {
@Id(assignable: true)
int id = 0;
int lid = 0;
String url = '';
String? title;
}
@Entity()
class NewsPicture extends Media {
@override
@Id(assignable: true)
int id = 0;
@Backlink('newsPicture')
final news = ToOne<News>();
}
@JsonSerializable(explicitToJson: true)
@Entity()
class News extends Data<News> implements DataInterface<News> {
@Id(assignable: true)
@JsonKey(defaultValue: 0)
int lid = 0;
final Picture = ToMany<NewsPicture>();
}
在生成过程中,objectbox_generator:resolver 给我这个错误信息:
invalid use of @Backlink() annotation - may only be used on a ToMany<> field
为什么不允许?我错过了什么?
在那个方向上不支持,因为它不是真正需要的(对任何事情都没有帮助),你可以只翻转 direction/change 存储关系的地方。此外,ToOne
关系的存储效率更高,因为它们只是数据库中的单个字段,而独立的 ToMany
关系需要中间“映射 table”。
如果您像这样更新您的模型,它将正常工作,并且您在应用程序中使用它的方式不会有任何不同:
@Entity()
class NewsPicture extends Media {
@override
@Id(assignable: true)
int id = 0;
final news = ToOne<News>();
}
@JsonSerializable(explicitToJson: true)
@Entity()
class News extends Data<News> implements DataInterface<News> {
@Id(assignable: true)
@JsonKey(defaultValue: 0)
int lid = 0;
@Backlink()
final Picture = ToMany<NewsPicture>();
}