首页 > 解决方案 > TypeORM 与 UUID 同步问题(MySQL)

问题描述

我在使用 MySQL 驱动程序上的 UUID PrimaryGeneratedColumns 的 TypeORM 上的同步设置时遇到了问题。似乎每次应用程序加载它都会尝试重新索引,因此它会删除 id 列并尝试再次添加它。问题是因为它是 UUID,对于 MySQL,列类型是 varchar(36) NOT NULL PRIMARY KEY。因此,由于未设置 UUID,因此我们遇到了键 'PRIMARY' 的重复条目 ''。

要重新创建问题,您可以这样做:

typeorm init --name MyProject --database mysql

编辑您的 User.ts 实体以将主键更改为 UUID。从“typeorm”导入{实体,PrimaryGeneratedColumn,列};

@Entity()
export class User {

    @PrimaryGeneratedColumn('uuid')
    id: string;

    @Column()
    firstName: string;

    @Column()
    lastName: string;

    @Column()
    age: number;

}

确保在 ormconfig.json 中将同步设置为 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: []

标签: mysqltypeorm

解决方案


推荐阅读