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()
}