Objectbox-go:删除模型 class

Objectbox-go: deleting model class

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

假设我们有一个结构

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

type Test struct {
    Id            uint64
    Name          string
}

一段时间后,我决定从项目中删除整个测试(删除 test.go 和 test.obx.go)。不幸的是,go generate 仍然“记住”这个 phantom class 并不断将它添加到 objectbox-model.go

model.RegisterBinding(TestBinding)

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

目前,ObjectBox 代码生成器不删除实体,因为它使用部分输入信息(一次一个文件),因此它不知道您是否删除了一个实体,或者它会在调用生成器的下一个文件。

我在 GH 上创建了一个 follow-up issue/feature 请求:https://github.com/objectbox/objectbox-generator/issues/22

如果您现在确实需要删除实体,直到将删除功能添加到生成器:当前的解决方法是手动更新 objectbox-model.json,删除实体 JSON 代码阻止定义它并将其 uid 添加到 retiredEntityUids 列表以避免重复使用相同的 UID(这会破坏事情)。此外,必须对已删除的属性、索引和关系(每个都有其 retired*Uids 列表)执行相同的操作。在生成器为 re-run 之后,实体将从 objectbox-model.go.

中移除

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