【问题标题】:TypeORM throws an error after insert with the queryBuilder in Nest.jsTypeORM 在 Nest.js 中使用 queryBuilder 插入后会引发错误
【发布时间】:2021-09-07 21:43:04
【问题描述】:

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

  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)

【问题讨论】:

  • 我得到了同样的错误,你找到解决这个问题的方法了吗?
  • 有什么更新吗?我有同样的问题。

标签: express nestjs typeorm node-mysql node-mysql2


【解决方案1】:

我必须在我的save 调用(而不是insert)中将reload 选项指定为false 才能消除错误。

对于insert,您希望在调用execute 之前向您的链中添加updateEntity(false) 调用。

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2021-04-28
      • 2017-09-09
      • 2015-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-10
      • 1970-01-01
      相关资源
      最近更新 更多