TypeORM Relations
NestJS 🟡 MidDéfinition
Décorateurs (@OneToMany, @ManyToOne, @ManyToMany, @OneToOne) qui définissent les relations entre entités. Permettent le chargement eager ou lazy.
Analogie
Comme les liens de parente dans un arbre généalogique : chaque relation a un type et une direction.
Exemple de code
@Entity()
export class User {
@OneToMany(() => Order, order => order.user)
orders: Order[];
}
@Entity()
export class Order {
@ManyToOne(() => User, user => user.orders)
user: User;
}
Cas d'usage
Modéliser les associations entre tables et naviguer le graphe d'objets en TypeScript.
Anti-pattern
Termes liés
En entretien
Explique-moi la différence entre @OneToMany et @ManyToOne, et pourquoi on les met des deux côtés de la relation ?
@OneToMany décrit le côté qui possède plusieurs éléments (User a plusieurs Order) et @ManyToOne le côté qui pointe vers un seul parent (Order a un User). Les deux décorateurs se répondent pour définir la direction complète de la relation, comme un lien de parenté dans un arbre généalogique.
Quel est le piège classique avec le chargement eager sur les relations ?
Si les relations sont en eager par défaut, chaque requête charge automatiquement les relations liées, ce qui provoque des requêtes N+1 massives. Il vaut mieux charger en lazy et ne récupérer les relations que quand on en a vraiment besoin.
Donne-moi un exemple concret d'usage de ces décorateurs.
Pour modéliser qu'un User a plusieurs Order, on met @OneToMany côté User et @ManyToOne côté Order. Ça permet de naviguer le graphe d'objets en TypeScript sans écrire de jointure SQL à la main.
Fiche mise à jour le 2026-09-27