1

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

  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', length: 225, unique: true, 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)
4

2 回答 2

2

我必须在我的调用(不是)中指定reload选项以使错误消失。falsesaveinsert

因为insert您想在updateEntity(false)调用之前向链中添加调用execute

这里有更多上下文: https ://github.com/typeorm/typeorm/issues/4651

于 2021-09-02T15:54:01.250 回答
0

尝试如下定义实体的id属性-User

@PrimaryColumn()
@Generated('uuid')
id: string;
于 2021-03-16T05:31:48.323 回答