Nestjs 如何在typeorm事务中使用服务方法

Nestjs 如何在typeorm事务中使用服务方法,nestjs,typeorm,typeorm-activerecord,Nestjs,Typeorm,Typeorm Activerecord,我读过关于打字交易的书 @Transaction() save(user: User, @TransactionRepository(User) userRepository: Repository<User>) { return userRepository.save(user); } 我不知道如何实现它。如果我错了,请纠正我,一个可能的解决方案是将模块服务依赖项(module1service dependency=>module1repository)更改为新的

我读过关于打字交易的书

@Transaction()
save(user: User, @TransactionRepository(User) userRepository: Repository<User>) {
    return userRepository.save(user);    
}
我不知道如何实现它。如果我错了,请纠正我,一个可能的解决方案是将模块服务依赖项(module1service dependency=>module1repository)更改为新的存储库实例,该实例是从tranction方法中的
@TransactionRepository(Module1Enity)module1repository:repository
获得的。或任何其他解决方案,请帮助


我正在使用postgres

在单元测试期间,您将遇到
@Transaction()
方面的问题


我建议使用不需要特定存储库的
getManager().transaction(()=>{…})
。在提供给
.transaction
的回调中执行的所有操作都将在单个事务下执行。

如果我没有弄错您的问题,您可以使用
@TransactionManager()entityManager?:entityManager
并将
entityManager
传递给服务 例如:

类模块3服务{
建造师(
专用只读模块1服务:Moudle1服务,
专用只读module2service:module2service
){}
@交易()
保存(@TransactionManager()entityManager?:entityManager){
此.module1service.create(entityManager)
this.module2service.create(entityManager)
}
class模块1服务{
保存(entityManager:entityManager){
entityManager.save()
}
类模块2服务{
保存(entityManager:entityManager){
entityManager.save()
}

您正在使用哪个数据库(Postgres,MySQL)?我正在使用Postgres请首先理解这个问题您是对的。但是您必须将
存储库
实例传递给每个服务方法。我想要一个解决方案,比如全局替换存储库实例和/或暂停所有其他异步操作
class Module3Service{
    constructor(
    private readonly module1service: Moudle1Service,
    private readonly module2service: Module2Service
    ){}

    @Transaction()
    save() {
        this.module1service.create()
        this.module2service.create()
    }