![](/img/trans.png)
[英]EntityColumnNotFound: No entity column "joinDate" was found
[英]TypeORM - EntityColumnNotFound: No entity column "anträge" was found
我試圖在我的 Angular 前端更新一個實體,在我的例子中是一個用戶 (Benutzer),但我收到錯誤EntityColumnNotFound:沒有找到實體列“anträge”。 在 NestJS(TypeORM)中。 當我使用 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);
}
}
創建-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;
}
要解決您的問題,您可以使用 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});
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.