mysql typeorm '无法更新实体,因为实体中未设置实体ID,'

j0pj023g  于 2023-04-19  发布在  Mysql
关注(0)|答案(1)|浏览(242)

我使用的是nestjs和typeorm(mysql)。
我正在输入orIgnore以使用“插入忽略”,但我得到了与标题相同的错误。

Cannot update entity because entity id is not set in the entity.

下面是我的代码。

await this.userSearchRepository
            .createQueryBuilder()
            .insert()
            .into(User_SEARCH)
            .values({
              userId: user.id,
              etc1: user.name,
            })
            .orIgnore()
            .execute();

下面是执行时在控制台中显示的查询。

INSERT  IGNORE INTO `User_SEARCH `(`id`, `userId`, `etc1`,`etc2`) VALUES (DEFAULT, ?, ?, DEFAULT) -- PARAMETERS: [39,"aaaaaaa"]
SELECT AUTO_INCREMENT 
FROM information_schema.tables 
WHERE table_name = 'table_name' AND table_schema = DATABASE();

而当执行上述查询时,正常值 输出。
表结构如下。

CREATE TABLE User_SEARCH {
  id INT primary key auto increment,
  userId INT FK,
  etc1 varchar(255) not null,
  etc2 varchar(255) null
}

当我在mysql工作台中输入查询时,它工作正常。
如果我输入id:null,它可以工作,但是有一个基本的解决方案吗?

@Entity()
export class User_SEARCH {

  @PrimaryGeneratedColumn()
  @IsNumber()
  id: number;

  @IsNumber()
  @Column({ nullable: true })
  userId: number;

  @IsString()
  @Column()
  etc1: string;

  @IsString()
  @Column({nullable:true})
  etc2: string;

  @ManyToOne(() => User, (user) => user.userSearch, { onDelete: 'CASCADE' })
  @JoinColumn({
    referencedColumnName: 'id',
    name: 'userId',
  })
  user: User;
}
bqujaahr

bqujaahr1#

updateEntity函数可能会对您有所帮助。
updateEntity:指示插入操作后是否必须更新实体。这可能会产生额外的查询或使用RETURNING / OUTPUT语句(取决于数据库)。默认情况下启用。

将其设置为false

await this.userSearchRepository
            .createQueryBuilder()
            .insert()
            .into(User_SEARCH)
            .values({
              userId: user.id,
              etc1: user.name,
            })
            .orIgnore()
            .updateEntity(false) // Include this one
            .execute();

相关问题