2024年5月31日发(作者:)
在TypeORM中,事务的实践主要涉及到`EntityManager`和
`TransactionManager`。
1. EntityManager:
* 当你使用`getRepository`或`getManager`方法获取一个实
体管理器时,你可以使用它来执行数据库操作。
* 你可以将多个数据库操作放在一个事务中,通过调用
`transaction`方法。
2. TransactionManager:
* `transaction`方法允许你执行一个或多个数据库操作,并
确保它们作为一个单一的事务运行。如果事务中的任何操作失败,
那么所有操作都会回滚。
* 使用示例:
```typescript
const entityManager = getEntityManager();
ction(async (em) => {
const user = new User();
= 'Test';
await t(user).flush();
// ... 其他的数据库操作 ...
});
```
3. 错误处理:
* 在事务中,如果发生错误,你可以捕获它并决定是否回滚
事务或继续。
* 使用示例:
```typescript
const entityManager = getEntityManager();
try {
await ction(async (em) => {
const user = new User();
= 'Test';
await t(user).flush();
// ... 其他的数据库操作 ...
});
} catch (error) {
(error); // 打印错误信息
// 如果有必要,可以手动回滚事务:
// ck();
}
```
4. 使用TypeORM的连接池:
* TypeORM使用连接池来管理数据库连接。这意味着当你开
始一个事务时,它不会为事务创建一个新的连接,而是从连接池中
获取一个现有的连接。事务完成后,连接返回到连接池。
5. 注意事项:
* 确保在结束事务后关闭连接。这通常通过调用`close`方法完
成,或者确保你的应用程序在结束时关闭所有数据库连接。
* 避免长时间运行的事务,因为它们会锁定数据库资源并可能
影响性能。考虑将长事务分解为多个短事务。
6. 连接和事务隔离级别:
* 你可以配置连接的隔离级别来控制事务如何与其他事务隔离。
这可以在TypeORM的配置中设置。
7. 手动开启和提交事务:
* 你也可以手动开启一个事务,使用`ransaction()`,
然后在完成后使用`()`提交事务。如果你想回滚事务,可
以使用`ck()`。
8. 嵌套事务:
* 在某些数据库中,你可以有嵌套事务。但在TypeORM中,一
旦你开始一个事务,你必须在结束它之前完成所有的数据库操作。
你不能在一个已经开始的事务中再次开始另一个事务。


发布评论