typescript - TypeORM duplicerat nyckelvärde för ManyToMany-relation


Kontext
Jag använder TypeORM och NestJS.
Jag har två entiteter :

  • träningspass
  • övning

Ett träningspass kan ha flera övningar och en övning kan ha flera träningspass. För att implementera detta använder jag en ManyToMany-relation.

Träningsenhet

@Entity()
export class Workout {
  @PrimaryGeneratedColumn()
  id: number;

  @JoinTable()
  @ManyToMany(() => Exercise, (exercise) => exercise.workouts)
  exercises: Exercise[];

}

Träningsenhet

@Entity()
export class Exercise {
  @PrimaryGeneratedColumn()
  id: number;

  @ManyToMany(() => Workout, (workout) => workout.exercises)
  workouts: Workout[];
}

Allt fungerar bra men jag fick ett felmeddelande duplicate key value violates unique constraint när jag försöker skapa ett träningspass med två samma övningar.

Fråga : hur kan jag ha dubblettentiteter i en ManyToMany-relation ?

Svar #1

Bakom kulisserna använder det implicit många-till-många tabell:

|workout_id | excersise_id |
| 1         | 1            |

Primärnyckeln i det här fallet kommer att kombineras med dessa två nycklar.

För att åtgärda ditt problem skulle jag rekommendera att konvertera implicit många-till-många till explicit: https://orkhan.gitbook.io/typeorm/docs/many-to-many-relations#many-to-many-relations-with-custom-properties

I ditt fall kommer du att ha en anpassad egenskap id, detta kommer att lösa duplicate key value violates unique constraint, eftersom endast id kommer att vara unik.

Hoppas det hjälper.

Relaterade artiklar