📅  最后修改于: 2020-10-19 03:43:17             🧑  作者: Mango
通常,事务是负责执行数据检索和更新的逻辑单元。本节详细说明有关事务。
我们可以使用连接或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({ isolation: "SERIALIZABLE" })
save(@TransactionManager() manager: EntityManager, student: Student) {
return manager.save(student);
}
这里,
我们使用SERIALIZABLE隔离级别进行事务。
@Transaction() save(student: Student, @TransactionRepository(Student) studentRepository:
Repository) {
return studentRepository.save(student);
}
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();
}