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
相关产品推荐
相关产品推荐

