repository.save 使用插入而不是更新

Rya*_*sad 8 typeorm

我使用 TypeORM 的存储库模式,使用一个简单的表、两列estate_num作为主键并estateId使用 mysql。

如果主键记录不存在,则该repository.save 方法应该插入,否则更新它。

相反,我收到以下错误:

query: SELECT `estate`.`estate_num` AS `estate_estate_num`, `estate`.`estateId` AS `estate_estateId` FROM `estate` `estate` WHERE (`estate`.`estate_num` = ?) -- PARAMETERS: ["0"]
query: START TRANSACTION
query: INSERT INTO `estate`(`estate_num`, `estateId`) VALUES (?, ?) -- PARAMETERS: ["0","caae4e67796e4ac000743f009210fcb0467fdf87d0fbbf6107359cf53f5b544b79eefdfdd78f95d50301f20a9c3212cd3970af22b722e59313813e8c5d2732d0"]
query failed: INSERT INTO `estate`(`estate_num`, `estateId`) VALUES (?, ?) -- PARAMETERS: ["0","caae4e67796e4ac000743f009210fcb0467fdf87d0fbbf6107359cf53f5b544b79eefdfdd78f95d50301f20a9c3212cd3970af22b722e59313813e8c5d2732d0"]
error: { Error: ER_DUP_ENTRY: Duplicate entry '0' for key 'PRIMARY'
Run Code Online (Sandbox Code Playgroud)

我可以手动运行SELECT,我认为这决定是否插入还是更新。它返回一行,正如我所期望的匹配的estate_num.

其实体模型是:

@Entity()
export class Estate {
  @PrimaryColumn({
    name: 'estate_num',
  })
  estateNum: number;

  @Column({
    name: 'estateId',
  })
  estateId: string;
}
Run Code Online (Sandbox Code Playgroud)

注意estate_num不是自动递增,密钥将始终被提供。这很奇怪,我明白。

谢谢!