Objectbox-go:删除模型类

问题描述

不幸的是,ObjectBox Go的文档没有提供有关删除由ObjectBox支持的整个类型结构的信息。

假设我们有一个结构

//go:generate go run github.com/objectBox/objectBox-go/cmd/objectBox-gogen

type Test struct {
    Id            uint64
    Name          string
}

一段时间后,我决定从项目中删除整个Test(删除了test.go和test.obx.go)。不幸的是,go generate仍然“记住”了这个幻影类,并一直将其添加到objectBox-model.go

model.RegisterBinding(TestBinding)

如何安全删除此结构(及其数据)?

解决方法

当前,ObjectBox代码生成器不会删除实体,因为它可以处理部分输入信息(一次只有一个文件),因此它不知道您是否已删除实体,或者它是否在下一个文件中需要生成器。

我已经在GH上创建了后续问题/功能请求:https://github.com/objectbox/objectbox-generator/issues/22

如果您确实需要立即删除实体,直到将删除功能添加到生成器之前:当前的解决方法是手动更新objectbox-model.json,删除定义它的实体JSON代码块并添加其uidretiredEntityUids列表中,以避免重复使用相同的UID(这会造成问题)。另外,必须对删除的属性,索引和关系执行相同的操作(每个属性都有其retired*Uids列表)。重新运行生成器后,该实体将从objectbox-model.go中删除。

我不建议您这样做,因为手动编辑模型JSON文件时很容易出错,可能会导致数据丢失。如果可以,请等待生成器支持删除。