Transaction management in TypeORM can be implemented in the following ways:
-
Using DataSource.transaction():
typescriptawait dataSource.transaction(async (transactionalEntityManager) => { await transactionalEntityManager.save(user); await transactionalEntityManager.save(order); }); -
Using the transaction() method of Repository:
typescriptawait userRepository.manager.transaction(async (manager) => { await manager.save(user); }); -
Using QueryRunner for manual transaction control:
typescriptconst queryRunner = dataSource.createQueryRunner(); await queryRunner.connect(); await queryRunner.startTransaction(); try { await queryRunner.manager.save(user); await queryRunner.commitTransaction(); } catch (err) { await queryRunner.rollbackTransaction(); } finally { await queryRunner.release(); }
Transaction isolation levels can be configured by setting isolationLevel, including READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ, and SERIALIZABLE.