
- TypeORM 教程
- TypeORM - 主页
- TypeORM - 介绍
- TypeORM - 安装
- TypeORM - 创建一个简单项目
- TypeORM - 连接 API
- TypeORM - 实体
- TypeORM - 关系
- TypeORM - 使用存储库
- TypeORM - 使用实体管理器
- TypeORM - 查询构建器
- TypeORM - 查询操作
- TypeORM - 事务
- TypeORM - 索引
- TypeORM - 实体侦听器和日志记录
- TypeORM 与 JavaScript
- TypeORM - 使用 MongoDB
- TypeORM 与 Express
- TypeORM - 迁移
- TypeORM - 使用 CLI
- TypeORM 有用资源
- TypeORM - 快速指南
- TypeORM - 有用资源
- TypeORM - 讨论
TypeORM - 事务
一般来说,事务是一个负责执行数据检索和更新的逻辑单元。本部分详细解释事务。
创建事务
我们可以使用连接或 EntityManage 创建事务。以下示例用于指定创建连接并保存其内部数据。
import {getConnection} from "typeorm"; await getConnection().transaction(async transactionalEntityManager => { await connection.manager.save(students); });
EntityManager 如下所示 −
import {getManager} from "typeorm"; await getManager().transaction(async transactionalEntityManager => { await transactionalEntityManager.save(students); });
装饰器
在 TypeORM 中,我们有三种与事务相关的装饰器。
- @Transaction - 将所有执行封装在一个数据库事务中。
- @TransactionManager - 用于在事务内部执行查询。如下定义,
@Transaction({ isolation: "SERIALIZABLE" }) save(@TransactionManager() manager: EntityManager, student: Student) { return manager.save(student); }
此处,
我们对事务使用了 SERIALIZABLE 隔离级别。
- @TransactionRepository - 用于在存储库中注入事务。如下定义,
@Transaction() save(student: Student, @TransactionRepository(Student) studentRepository: Repository<Student>) { return studentRepository.save(student); }
QueryRunner 中的事务
QueryRunner 用于执行所有数据库查询。它只有一个数据库连接。可以使用 QueryRunner 组织数据库事务。让我们使用 QueryRunner 执行单一事务。
import {getConnection} from "typeorm"; // get a connection and create a new query runner const connection = getConnection(); const queryRunner = connection.createQueryRunner(); // establish real database connection using our new query runner await queryRunner.connect(); // now we can execute any queries on a query runner, for example: await queryRunner.query("SELECT * FROM students");
现在,使用以下语句启动事务 −
await queryRunner.startTransaction();
然后,使用以下语句提交并回滚事务,
try { await queryRunner.commitTransaction(); }
如果出现任何错误,则由 catch() 处理,
catch (err) { // since we have errors lets rollback changes we made await queryRunner.rollbackTransaction(); }
现在,如下释放 queryRunner −
finally { // you need to release query runner which is manually created: await queryRunner.release(); }
广告