Description

多对多关联,表迁移的时候,如果中间表对应的关联表不是主键id的话,创建会报错,报错内容为:

Error 1075: Incorrect table definition; there can be only one auto column and it must be defined as a key

例子:

type Area struct{
        ID        uint           `gorm:"primarykey"` // 主键ID
        Code     int           `json:"code" form:"code" gorm:"column:code;type:int"`
    Schools []School  `json:"schools" gorm:"many2many:school_areas;foreignKey:Code;joinForeignKey:area_id;references:ID;JoinReferences:school_system_id"`
}

type School struct{
        ID        uint           `gorm:"primarykey"` // 主键ID
        Areas []AreaModel `json:"areas" gorm:"many2many:school_areas;foreignKey:ID;joinForeignKey:school_system_id;references:Code;JoinReferences:area_id"`
}

其中中间表为school_areas表 2个主表

主表schools 的主键id字段,对应中间表的school_system_id字段
主表areas 的code字段,对应中间表的area_id字段

自动迁移的时候就会报错,生成的sql为

CREATE TABLE `school_areas` (`area_id` bigint COMMENT '省市编码',`school_system_id` bigint unsigned AUTO_INCREMENT,PRIMARY KEY (`area_id`,`school_system_id`))

数据库运行报1075错误,数据库版本为 5.7+ go版本为 1.16 gorm版本为 v1.21.12

Comment From: fivenull

schools表和areas表主键都需要设置自增

Comment From: a631807682

duplicated of https://github.com/go-gorm/gorm/issues/5320 upgrade gorm version