我已经阅读了有关typeorm中事务的信息。
@Transaction()
save(user: User, @TransactionRepository(User) userRepository: Repository<User>) {
return userRepository.save(user);
}
我有一个带有多个模块和服务的nestjs应用程序。我需要做的是在事务中调用不同的服务方法。但是@TransactionRepository
为我提供了repository
。因此,我应该怎么做才能在内部调用多种服务方法来实现事务。像
class Module3Service{
constructor(
private readonly module1service: Moudle1Service,
private readonly module2service: Module2Service
){}
@Transaction()
save() {
this.module1service.create()
this.module2service.create()
}
我不知道该怎么实现。并纠正我,如果我错了,可能的解决方案是更改moduleservice依赖项(module1service依赖关系=> module1repositoroy)以更改为我们从tranction方法中从@TransactionRepository(Module1Enity) module1repository: Repository<Module1Entity>
获得的新存储库实例。或任何其他解决方案,请帮助
我正在使用postgres
答案 0 :(得分:0)
如果我正确回答了您的问题,则可以使用@TransactionManager() entityManager?: EntityManager
并将entityManager
传递给服务
例如:
class Module3Service{
constructor(
private readonly module1service: Moudle1Service,
private readonly module2service: Module2Service
){}
@Transaction()
save(@TransactionManager() entityManager?: EntityManager) {
this.module1service.create(entityManager)
this.module2service.create(entityManager)
}
class Module1Service{
save(entityManager: EntityManager) {
entityManager.save()
}
class Module2Service{
save(entityManager: EntityManager) {
entityManager.save()
}
答案 1 :(得分:-1)
在单元测试期间,您将无法使用@Transaction()
。
我建议使用Typeorm's manager getManager().transaction( () => { ... } )
,它不需要特定的存储库。在提供给.transaction
的回调中执行的所有操作都将在单个事务下进行。