在 Nest.js

问题描述

我有一个实体和服务定义如下。

  1. user.entity.js
@Entity({ name: 'users' })
export class User {
  @Column({
    type: 'binary',length: 16,select: false,primary: true,default: () => `(UUID_TO_BIN(UUID(),1))`,})

  id: string;
  @Index()
  @Column({ type: 'varchar',length: 225,nullable: false })
  name: string;

  @Column({ type: 'varchar',length: 15,unique: true,nullable: false })
  MSISDN: string;

  @Column({ type: 'varchar',nullable: false })
  email_address: string;

  @Column({ type: 'datetime',default: () => 'CURRENT_TIMESTAMP' })
  created_at: Date;

  @Column({ type: 'datetime',nullable: true,onUpdate: 'CURRENT_TIMESTAMP' })
  updated_at: Date;
}
  1. user.service.js
@Injectable()
export class UserService {
  constructor(
    @InjectRepository(User)
    private usersRepository: Repository<User>,) {}

  create(user: DeepPartial<User>): Promise<User> {
    return this.usersRepository
      .createqueryBuilder()
      .insert()
      .values({ ...user})
      .execute();
  }
}

每当我尝试从 Postman 客户端创建用户时,该记录实际上已插入到数据库中,但我从 Postman 客户端收到 500 响应。

邮递员回复

{
    "statusCode": 500,"message": "Internal server error"
}

CLI 错误如下所示:

[nest] 9084   - 15/03/2021,11:17:47   [ExceptionsHandler] Cannot update entity because entity id is not set in the entity. +331142ms
Error: Cannot update entity because entity id is not set in the entity.
    at C:\Users\Mnengwa\workspace\kodisha\kodisha-web-api\node_modules\typeorm\query-builder\ReturningResultsEntityUpdator.js:128:39
    at Array.map (<anonymous>)
    at ReturningResultsEntityUpdator.<anonymous> (C:\Users\Mnengwa\workspace\kodisha\kodisha-web-api\node_modules\typeorm\query-builder\ReturningResultsEntityUpdator.js:122:46)
    at step (C:\Users\Mnengwa\workspace\kodisha\kodisha-web-api\node_modules\typeorm\node_modules\tslib\tslib.js:141:27)
    at Object.next (C:\Users\Mnengwa\workspace\kodisha\kodisha-web-api\node_modules\typeorm\node_modules\tslib\tslib.js:122:57)
    at C:\Users\Mnengwa\workspace\kodisha\kodisha-web-api\node_modules\typeorm\node_modules\tslib\tslib.js:115:75
    at new Promise (<anonymous>)
    at Object.__awaiter (C:\Users\Mnengwa\workspace\kodisha\kodisha-web-api\node_modules\typeorm\node_modules\tslib\tslib.js:111:16)
    at ReturningResultsEntityUpdator.insert (C:\Users\Mnengwa\workspace\kodisha\kodisha-web-api\node_modules\typeorm\query-builder\ReturningResultsEntityUpdator.js:87:24)
    at InsertQueryBuilder.<anonymous> (C:\Users\Mnengwa\workspace\kodisha\kodisha-web-api\node_modules\typeorm\query-builder\InsertQueryBuilder.js:105:76)

解决方法

尝试为 id 实体定义 User 属性,如下所示 -

@PrimaryColumn()
@Generated('uuid')
id: string;