📜  TypeORM-交易

📅  最后修改于: 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-将所有执行包装在单个数据库事务中。
  • @ TransactionManager-用于在事务内执行查询。定义如下
@Transaction({ isolation: "SERIALIZABLE" }) 

save(@TransactionManager() manager: EntityManager, student: Student) {     
   return manager.save(student); 
}

这里,

我们使用SERIALIZABLE隔离级别进行事务。

  • @ TransactionRepository-用于在存储库中注入事务。定义如下
@Transaction() save(student: Student, @TransactionRepository(Student) studentRepository: 
Repository) { 
   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(); 
}