TypeORM Transactions

NestJS 🔴 Senior

Définition

Mécanisme pour exécuter plusieurs opérations de base de données de façon atomique. Soit toutes réussissent, soit toutes sont annulées.

Analogie

Comme un virement bancaire : le débit ET le crédit doivent passer ensemble, sinon rien ne bouge.

Exemple de code

async transfer(from: string, to: string, amount: number) {
  await this.dataSource.transaction(async (manager) => {
    await manager.decrement(Account, { id: from }, 'balance', amount);
    await manager.increment(Account, { id: to }, 'balance', amount);
  });
}

Cas d'usage

Garantir la cohérence des données lors d'opérations multi-tables comme les paiements.

Anti-pattern

Effectuer des opérations liées sans transaction, risquant un état incohérent en cas d'erreur.
#database#interview

En entretien

  1. Explique-moi à quoi sert une transaction TypeORM.

    Ça permet d'exécuter plusieurs opérations base de données de façon atomique : soit toutes réussissent, soit toutes sont annulées. C'est comme un virement bancaire où le débit et le crédit doivent passer ensemble, sinon rien ne bouge.

  2. Quand est-ce que tu éviterais de t'en passer ?

    Dès qu'il y a des opérations liées sur plusieurs tables, comme un paiement qui débite un compte et crédite un autre : sans transaction on risque un état incohérent en cas d'erreur au milieu.

  3. Comment ça s'écrit concrètement dans le code ?

    On passe par dataSource.transaction avec un callback qui reçoit un manager, et on effectue toutes les opérations liées via ce manager, comme décrémenter puis incrémenter deux comptes.

Fiche mise à jour le 2026-09-27

← → au clavier pour passer d'une fiche à l'autre