如何用sequelize-typescript结合SQLite创建指定复合主键?
问题原因
你给hash和filePath两个字段都加了unique: true,这会让Sequelize给每个字段单独创建唯一约束,导致哪怕filePath不同,重复的hash也会触发校验失败。而你实际需要的是复合主键(联合主键),只要求两者的组合唯一,不是单个字段单独唯一。
解决方法
去掉两个字段配置里的unique: true,只保留@PrimaryKey装饰器即可——复合主键本身就会保证hash和filePath的组合唯一。
修改后的代码如下:
@Table({ tableName: 'files' }) class File extends Model { @PrimaryKey @Column({ allowNull: false, }) hash!: string @PrimaryKey @Column({ allowNull: false, }) filePath!: string }
验证效果
这样配置后,Sequelize生成的SQL会和你预期的一致:
CREATE TABLE files( `hash` VARCHAR(255) NOT NULL, `filePath` VARCHAR(255) NOT NULL, PRIMARY KEY(hash, filePath) );
此时插入同一hash但不同filePath的记录不会报错,只有当hash和filePath完全重复时才会触发主键约束报错,符合你的需求。
内容的提问来源于stack exchange,提问作者spaxxUnited
相关产品推荐
相关产品推荐

