首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TypeORM在插入queryBuilder后在Nest.js中引发错误

TypeORM在插入queryBuilder后在Nest.js中引发错误
EN

Stack Overflow用户
提问于 2021-03-15 08:22:42
回答 2查看 2.4K关注 0票数 1

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

  1. user.entity.js

代码语言:javascript
复制
@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

代码语言:javascript
复制
@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响应。

邮递员反应

代码语言:javascript
复制
{
    "statusCode": 500,
    "message": "Internal server error"
}

CLI错误如下所示:

代码语言:javascript
复制
[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)
EN

回答 2

Stack Overflow用户

发布于 2021-09-02 15:54:01

我必须在我的reload调用(而不是insert)中将false选项指定为false,以使错误消失。

对于insert,您需要在调用execute之前向链中添加一个updateEntity(false)调用。

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

票数 2
EN

Stack Overflow用户

发布于 2021-03-16 05:31:48

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

代码语言:javascript
复制
@PrimaryColumn()
@Generated('uuid')
id: string;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66634526

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档