我使用 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不是自动递增,密钥将始终被提供。这很奇怪,我明白。
谢谢!
从您的日志中可以清楚地看出,您已将 ID 作为 string 传递-- PARAMETERS: ["0"],但Estate实体estateNum的类型为number。在将 ID 传递给 之前将其转换为数字repository.save。
| 归档时间: |
|
| 查看次数: |
21026 次 |
| 最近记录: |