typescript - typeorm Fremdschlüssel für Spalte ohne Primärschlüssel setzen
Hallo, ich versuche, in TypeORM einen Fremdschlüssel auf eine Spalte zu setzen, die kein Primärschlüssel ist, aber ich bekomme Fehler
Ich habe einen Mitarbeiter und eine Abteilung
Ich habe eine Spalte in der Abteilungsleiter-ID, die auf die Spalte Registrierung in der Mitarbeitertabelle verweisen muss
Mitarbeiter-Einheit:
@Entity({ name: 'employees' })
export class Employee extends SharedProp {
constructor(
firstName: string,
lastName: string,
) {
super();
this.firstName = firstName;
this.lastName = lastName;
}
@PrimaryGeneratedColumn('uuid')
id: string;
@Column({ name: 'matricula', nullable: false })
matricula: string;
@Column({ name: 'first_name', nullable: false })
firstName: string;
@Column({ name: 'last_name', nullable: false })
lastName: string;
@Column({ type: 'string', name: 'user_id', nullable: true })
user_id: string;
@Column()
departament_id: string;
@ManyToOne(() => Departament, (departament: Departament) => departament.employees)
@JoinColumn({ name: 'departament_id' })
departament: Departament;
@OneToOne(() => User)
@JoinColumn({ name: 'user_id' })
user: User;
}
Abteilungs-Einheit:
@Entity({ name: 'departaments' })
export class Departament {
@PrimaryGeneratedColumn('uuid')
id: string;
@Column()
departament_name: string;
@Column({ type: 'string', name: 'manager_id', nullable: true })
manager_id: string | null;
@OneToOne(() => Employee, employee => employee.departament, {
nullable: true,
})
@JoinColumn({ name: 'manager_id', referencedColumnName: 'matricula' })
manager: Employee;
@OneToMany(() => Employee, (employee: Employee) => employee.departament)
employees: Array<Employee>;
@CreateDateColumn({ name: 'created_at' })
createdAt: Date;
@UpdateDateColumn({ name: 'updated_at' })
UpdatedAt: Date;
}
Ich habe versucht, eine Migration zu erstellen, die zu folgendem Ergebnis führte:
export class refactor1597449093253 implements MigrationInterface {
name = 'refactor1597449093253'
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE "departaments" DROP CONSTRAINT "FK_65bfca70b0ffbf5351061f2ea64"`);
await queryRunner.query(`ALTER TABLE "departaments" DROP CONSTRAINT "UQ_65bfca70b0ffbf5351061f2ea64"`);
await queryRunner.query(`ALTER TABLE "departaments" DROP COLUMN "manager_id"`);
await queryRunner.query(`ALTER TABLE "departaments" ADD "manager_id" character varying`);
await queryRunner.query(`ALTER TABLE "departaments" ADD CONSTRAINT "UQ_65bfca70b0ffbf5351061f2ea64" UNIQUE ("manager_id")`);
await queryRunner.query(`ALTER TABLE "departaments" ADD CONSTRAINT "FK_65bfca70b0ffbf5351061f2ea64" FOREIGN KEY ("manager_id") REFERENCES "employees"("matricula") ON DELETE NO ACTION ON UPDATE NO ACTION`);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE "departaments" DROP CONSTRAINT "FK_65bfca70b0ffbf5351061f2ea64"`);
await queryRunner.query(`ALTER TABLE "departaments" DROP CONSTRAINT "UQ_65bfca70b0ffbf5351061f2ea64"`);
await queryRunner.query(`ALTER TABLE "departaments" DROP COLUMN "manager_id"`);
await queryRunner.query(`ALTER TABLE "departaments" ADD "manager_id" uuid`);
await queryRunner.query(`ALTER TABLE "departaments" ADD CONSTRAINT "UQ_65bfca70b0ffbf5351061f2ea64" UNIQUE ("manager_id")`);
await queryRunner.query(`ALTER TABLE "departaments" ADD CONSTRAINT "FK_65bfca70b0ffbf5351061f2ea64" FOREIGN KEY ("manager_id") REFERENCES "employees"("id") ON DELETE NO ACTION ON UPDATE NO ACTION`);
}
}
aber ich habe diesen Fehler beim Ausführen der Migration erhalten:
Abfrage fehlgeschlagen: ALTER TABLE "departaments" ADD CONSTRAINT "FK_65bfca70b0ffbf5351061f2ea64" FOREIGN KEY ("manager_id") REFERENCES "employees"("matricula") ON DELETE NO ACTION ON UPDATE NO ACTION
Fehler: Fehler: Es gibt keine eindeutige Einschränkung, die den angegebenen Schlüsseln für die referenzierte Tabelle "employee" entspricht