【问题标题】:TypeORM - EntityColumnNotFound: No entity column "anträge" was foundTypeORM - EntityColumnNotFound:未找到实体列“anträge”
【发布时间】:2021-04-02 03:30:18
【问题描述】:

我正在尝试更新我的 Angular 前端中的实体,在我的情况下是用户 (Benutzer),但我收到错误 EntityColumnNotFound: No entity column "anträge" was found. in NestJS (类型ORM)。当我使用 updateBenutzer 服务/控制器时,错误来了。我的代码如下所示:

benutzer.entity.ts

@Entity()
export class Benutzer {
    @PrimaryGeneratedColumn({ type: "int" })
    BenutzerID: number;

    @Column({ type: "varchar", length: 50})
    Benutzername: string;

    @Column({ type: "varchar", length: 50})
    Passwort: string;

    @Column({ default: false})
    istAdmin: boolean;

    @Column({ default: false})
    istVorgesetzter: boolean;

    @Column({ type: "int"})
    Vorgesetzter: number;

    @Column({ type: "varchar", length: 50})
    Vorname: string;

    @Column({ type: "varchar", length: 50})
    Nachname: string;

    @Column()
    Geburtsdatum: Date;

    @Column({ type: "varchar", length: 50})
    Email: string;

    @Column()
    Eintrittsdatum: Date;

    @ManyToOne(() => Arbeitstage, arbeitstage => arbeitstage.allebenutzer)
    arbeitstage: Arbeitstage;

    @ManyToOne(() => Bundesland, bundesland => bundesland.alleBenutzer)
    bundesland: Bundesland;

    @OneToMany(() => Urlaubsantrag, urlaubsantrag => urlaubsantrag.benutzer)
    anträge: Urlaubsantrag[];
}

urlaubsantrag.entity.ts

@Entity()
export class Urlaubsantrag {
    @PrimaryGeneratedColumn({ type: "int" })
    AntragID: number;

    @Column({ type: "varchar", length: 50 })
    Urlaubsart: string;

    @Column({ type: "varchar", length: 50})
    Status: string;
    @Column()
    von: Date;

    @Column()
    bis: Date;

    @Column({ type: "varchar", length: 50})
    Grund: string;

    @Column()
    informiert: boolean;

    @ManyToOne(() => Benutzer, benutzer => benutzer.anträge, { onDelete: 'CASCADE' })
    benutzer: Benutzer;
}

benutzer.service.ts

@Injectable()
export class BenutzerService {
    constructor(
        @InjectRepository(Benutzer)
        private benutzerRepository: Repository<Benutzer>,
      ) {}
    
      getAllBenutzer(): Promise<Benutzer[]> {
        return this.benutzerRepository.find({ relations: ['bundesland', 'arbeitstage', 'anträge']});
      }
    
      findBenutzerByID(id: number): Promise<Benutzer> {
        return this.benutzerRepository.findOne(id, { relations: ['bundesland', 'arbeitstage', 'anträge']});
      }

      async findBenutzerByVorgesetzter(id: number): Promise<Benutzer[]> {
        return this.benutzerRepository.find({ where: {Vorgesetzter: id}});
      }

      getAllVorgesetzten(istVorgesetzter: boolean): Promise<Benutzer[]>{
        return this.benutzerRepository.find({ where: {istVorgesetzter: istVorgesetzter} });
      }

      async createBenutzer(benutzer: CreateBenutzer) {
        const nutzer = this.benutzerRepository.create(benutzer);
        await this.benutzerRepository.save(benutzer);
        return nutzer;
      }

      async updateBenutzer(id: number, createBenutzerDTO: CreateBenutzer) {
        return await this.benutzerRepository.update( id, createBenutzerDTO);
      }
    
      async deleteBenutzer(id: number): Promise<DeleteResult> {
        return await this.benutzerRepository.findOne(id).then((value) => {
          return this.benutzerRepository.delete(value);
        });
      }
}

benutzer.controller.ts

@Controller('benutzer')
export class BenutzerController {
    constructor(private readonly benutzerService: BenutzerService) {}

    @Post()
    async createBenutzer(@Body() createBenutzer: CreateBenutzer): Promise<Benutzer> {
    return this.benutzerService.createBenutzer(createBenutzer);
    }

    @Get()
    async getBenutzer(): Promise<Benutzer[]> {
        return this.benutzerService.getAllBenutzer();
    }

    @Get('/vorgesetzter')
    async getAllVorgesetzten(@Query('istVorgesetzter', new ParseBoolPipe()) istVorgesetzter: boolean): Promise<Benutzer[]>{
      return this.benutzerService.getAllVorgesetzten(istVorgesetzter);
    }

    @Get(':id')
    async getBenutzerByID(@Param('id', new ParseIntPipe()) id): Promise<Benutzer> {
        return this.benutzerService.findBenutzerByID(id);
    }

    @Get('/vorgesetzter/:id')
    async getBenutzerByVorgesetzter(@Param('id', new ParseIntPipe()) id): Promise<Benutzer[]> {
        return this.benutzerService.findBenutzerByVorgesetzter(id);
    }

    @Put(':id')
    updateBenutzer(@Param('id') id: number, @Body() createBenutzerDTO: CreateBenutzer) {
    return this.benutzerService.updateBenutzer(id, createBenutzerDTO);
    } 

    @Delete(':id')
    async remove(@Param('id', new ParseIntPipe()) id) {
    return this.benutzerService.deleteBenutzer(id);
  }
}

create-benutzer.dto.ts

    export class CreateBenutzer {
    @IsString()
    @MinLength(4)
    @MaxLength(20)
    readonly Benutzername: string;

    @IsString()
    @MinLength(4)
    @MaxLength(20)
    //@Matches(/((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/, 
    //{message: 'das Passwort ist zu schwach'})
    readonly Passwort: string;
    readonly istAdmin: boolean;
    readonly istVorgesetzter: boolean;
    readonly Vorgesetzter: number;
    readonly Vorname: string;
    readonly Nachname: string;
    readonly Geburtsdatum: Date;
    readonly Email: string;
    readonly Eintrittsdatum: Date;
    readonly arbeitstage: Arbeitstage;
    readonly bundesland: Bundesland;
}

【问题讨论】:

  • 什么是 createBenutzerDTO?您需要使用此 dto 创建一个类型为“benutzer”的实体,然后执行更新操作。如果这不起作用,请改用存储库的保存功能
  • 可以分享createBenutzerDTO代码吗?
  • @Youba 我添加了 dto 文件。

标签: angular nestjs typeorm


【解决方案1】:

要解决您的问题,您可以使用 Save 方法来更新实体:
原因是 save 方法执行一个没有级联和关系操作的原始操作。

 async updateBenutzer(id: number, createBenutzerDTO: CreateBenutzer) {

 let benutzerUpdate= await this.benutzerRepository.findOne({ BenutzerID:id});
 if(!benutzerUpdate) throw new NotFoundException({message:"Benutzer doesn't exist" });

    return this.benutzerRepository.save({...benutzerUpdate,...createBenutzerDTO});

  }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-22
    • 2020-10-02
    • 2023-03-19
    • 2019-02-08
    • 1970-01-01
    • 1970-01-01
    • 2020-06-17
    相关资源
    最近更新 更多