我在TypeORM上与MySQL驱动程序上的UUID PrimaryGeneratedColumns进行同步设置时遇到问题。似乎每次应用程序加载时,它都会尝试重新索引,因此它将删除id列并尝试再次添加它。问题是,由于它是UUID,因此对于MySQL,列类型为varchar(36)NOT NULL PRIMARY KEY。因此,由于未设置UUID,因此我们遇到了键“ PRIMARY”的重复条目“”。
要重新创建问题,您可以这样操作:
typeorm init --name MyProject --database mysql
编辑您的User.ts实体,以将主键更改为UUID。 从“ typeorm”导入{Entity,PrimaryGeneratedColumn,Column};
@Entity()
export class User {
@PrimaryGeneratedColumn('uuid')
id: string;
@Column()
firstName: string;
@Column()
lastName: string;
@Column()
age: number;
}
确保在ormconfig.json中将syncyize设置为true。 启动应用程序,它将插入示例用户。重新启动应用程序并同步将运行,并尝试删除并重新添加该列并给出错误。
message: 'ER_DUP_ENTRY: Duplicate entry \'\' for key \'PRIMARY\'',
code: 'ER_DUP_ENTRY',
errno: 1062,
sqlMessage: 'Duplicate entry \'\' for key \'PRIMARY\'',
sqlState: '23000',
index: 0,
sql:
'ALTER TABLE `user` ADD `id` varchar(36) NOT NULL PRIMARY KEY',
name: 'QueryFailedError',
query:
'ALTER TABLE `user` ADD `id` varchar(36) NOT NULL PRIMARY KEY',
parameters: []