事务
创建和使用事务
事务是使用Connection
或EntityManager
创建的。 例如:
or
你想要在事务中运行的所有内容都必须在回调中执行:
当在事务中工作时需要总是使用提供的实体管理器实例 - transactionalEntityManager
。 如果你使用全局管理器(来自getManager
或来自连接的 manager 可能会遇到一些问题。 你也不能使用使用全局管理器或连接的类来执行查询。必须使用提供的事务实体管理器执行所有操作。
指定隔离级别
指定事务的隔离级别可以通过将其作为第一个参数提供来完成:
隔离级别实现与所有数据库不相关。
以下数据库驱动程序支持标准隔离级别(READ UNCOMMITTED
,READ COMMITTED
,REPEATABLE READ
,SERIALIZABLE
):
MySQL
Postgres
SQL Server
SQlite将事务默认为SERIALIZABLE
,但如果启用了shared cache mode,则事务可以使用READ UNCOMMITTED
隔离级别。
Oracle仅支持READ COMMITTED
和SERIALIZABLE
隔离级别。
事务装饰器
以下装饰器可以帮助你组织事务操作 - @Transaction
, @TransactionManager
和 @TransactionRepository
。
@Transaction
将其所有执行包装到一个数据库事务中,@TransactionManager
提供了一个事务实体管理器,它必须用于在该事务中执行查询:
隔离级别:
你必须使用@TransactionManager
提供的管理器。
但是,你也可以使用@TransactionRepository
注入事务存储库(使用事务实体管理器):
你可以注入内置的 TypeORM 的存储库,如Repository
,TreeRepository
和MongoRepository
(使用@TransactionRepository(Entity)entityRepository:Repository<Entity>
)或自定义存储库(扩展内置 TypeORM 的存储库类并用@ EntityRepository
装饰的类)使用@TransactionRepository() customRepository:CustomRepository
。
使用 QueryRunner
创建和控制单个数据库连接的状态
QueryRunner
创建和控制单个数据库连接的状态QueryRunner
提供单个数据库连接。 使用查询运行程序组织事务。 单个事务只能在单个查询运行器上建立。 你可以手动创建查询运行程序实例,并使用它来手动控制事务状态。 例如:
在QueryRunner
中有 3 种控制事务的方法:
startTransaction
- 启动一个新事务。commitTransaction
- 提交所有更改。rollbackTransaction
- 回滚所有更改。
了解有关Query Runner的更多信息。
Last updated
Was this helpful?