我使用Typeorm(v8.0.2)和Nestjs(v8)与Nodejs(v16)。我的问题是当我创建一本书时,Typeorm不返回生成的书ID
这里是Book.entity
@Entity()
export class Book {
@PrimaryGeneratedColumn('increment')
id: number;
@Column()
title: string;
@Column()
author: string;
}
这里是book.service
async createBook(createBookDto: CreateBookDto): Promise<Book> {
const book = await this.bookRepository.create(createBookDto)
await this.bookRepository.save(createBookDto)
return book
}
当我使用postman创建一本书时,它会返回
{
title: "example"
author: "foo"
}
缺少生成的图书的ID
2条答案
按热度按时间tmb3ates1#
TL;DR:返回
this.bookRepository.save(createBookDto)
的结果,不返回this.bookRepository.create(createBookDto)
从文档:
create
-创建User
的新示例。可选地接受具有用户属性的对象文字,该用户属性将被写入新创建的用户对象中。在您的示例中,您使用的是
@PrimaryGeneratedColumn()
装饰器,它使用数据库级别的自动增量函数。此列的值将在save()
方法之后生成,而不是在create()
之后生成。ivqmmu1c2#
在我的例子中,开发人员在实体文件中使用
@PrimaryColumn
装饰器而不是@PrimaryGeneratedColumn
装饰器定义了id
,并且nest在save()
之后没有返回id
。必须是
@PrimaryGeneratedColumn
。例如,@PrimaryGeneratedColumn({ name:'id', type:'bigint' }) id !: number