You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Nestjs搭配Typeorm新增数据后未返回生成的自增ID如何处理

Typeorm 新增实体未返回自增ID的解决方案

错误原因

你当前的代码存在两处逻辑错误:

  • Repository.create() 是同步工具方法,仅负责将入参转为实体类实例,不会触发数据库操作,不需要添加await关键字
  • 你调用Repository.save()方法时传入了原始CreateBookDto对象,而非create生成的实体实例,且没有接收save方法返回的带数据库生成字段的结果;最终返回的book只是内存中初始化的实例,没有绑定插入后生成的ID值

修复方案

提供两种等效的修复写法:

写法1:直接接收save方法返回值(最简洁)

async createBook(createBookDto: CreateBookDto): Promise<Book> {
  // save方法执行插入后会自动返回带自增ID、默认值等数据库生成字段的完整实体
  return await this.bookRepository.save(createBookDto);
}

写法2:保留create初始化步骤

async createBook(createBookDto: CreateBookDto): Promise<Book> {
  // create为同步方法,无需加await
  const book = this.bookRepository.create(createBookDto);
  // 传入实体实例执行save,返回处理后的完整实体
  return await this.bookRepository.save(book);
}

补充说明

只要实体主键正确配置了@PrimaryGeneratedColumn('increment'),Typeorm的save方法执行插入操作后,会自动将数据库生成的自增ID回写到返回的实体对象中,无需额外查询。

内容的提问来源于stack exchange,提问作者Arian Shahalami

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 09:15:03