Golang beego框架模型如何避免自动生成默认主键id?
beego ORM 禁用默认id主键、自定义主键解决方案
beego ORM 默认约定未显式声明主键的模型会自动新增id字段作为自增主键,按以下步骤配置即可覆盖该默认行为:
1. 修正模型定义,显式指定主键
需要满足两个要求:
- 所有映射数据库的字段必须首字母大写(Go语言仅导出字段允许反射访问,私有字段ORM无法读取)
- 给实际主键字段加
orm标签,用pk标记为主键,column指定对应数据库字段名,非自增主键额外加auto:false
修正后的代码示例:
type Person struct { PersonId string `json:"person_id" orm:"pk;column(person_id);auto:false"` Name string `json:"name" orm:"column(name)"` Email string `json:"email" orm:"column(email)"` }
2. 调整自动同步配置
如果你开启了ORM自动同步表结构功能orm.RunSyncdb(),修正模型后重新运行项目,框架就不会再自动生成id字段,也不会抛出缺少主键的报错。
如果你完全不需要框架修改现有数据库的表结构,直接注释掉orm.RunSyncdb()相关调用即可从根源避免框架改动表。
可选:显式指定绑定表名
beego ORM默认会将结构体名转为蛇形复数作为映射表名(比如Person默认映射people表),如果需要绑定person表,可以给模型新增TableName方法:
func (p *Person) TableName() string { return "person" }
内容的提问来源于stack exchange,提问作者Md. Sakhawath Hossain
相关产品推荐
相关产品推荐

