https://docs.nestjs.com/techniques/database#typeorm-transactions
서비스 구현
import {Injectable} from "@nestjs/common";
import {DataSource} from "typeorm";
import {User} from "../../entity/User.entity";
@Injectable()
export class TransactionService {
constructor(private dataSource: DataSource) {}
async createUser(user: User){
await this.dataSource.transaction(async (manager) =>{
const {name} = user
const newUser = new User();
newUser.name = name;
await manager.save(newUser);
throw new Error("transaction test!!");
});
}
}
터미널에서 출력되는 내용
query: START TRANSACTION
query: INSERT INTO `user`(`id`, `name`) VALUES (DEFAULT, ?) -- PARAMETERS: ["transaction test"]
query: ROLLBACK
[Nest] 4822 - 04/29/2024, 12:44:38 PM ERROR [ExceptionsHandler] transaction test!! Error: transaction test!!
ROLLBACK 이 되는걸 확인가능
아래처럼 구현을 해도 적용된다.
async createTransaction(createPostRequestDto: CreatePostRequestDto) {
const queryRunner = this.dataSource.createQueryRunner();
await queryRunner.connect();
await queryRunner.startTransaction();
try {
const { title, content, categories, hashtags } = createPostRequestDto;
const newPost = new Board();
newPost.title = title;
newPost.content = content;
const post = await queryRunner.manager.save(await this.boardRepository.save(newPost));
await queryRunner.commitTransaction();
} catch (error) {
await queryRunner.rollbackTransaction();
} finally {
await queryRunner.release();
}
}
'프로그래밍 > Nest.js' 카테고리의 다른 글
[NestJS] [ 게시판 ] Entity 관계 기록 (0) | 2024.04.30 |
---|---|
[ NestJS ] [ TypeORM ] DB 삭제, 수정, 생성 시간 남기기 (0) | 2024.04.29 |
[ NestJS ] [TypeORM ] N : M 관계 형성 (0) | 2024.04.27 |
[ NestJS ] [ TypeORM ] 1: N 관계 형성, 수정, 삭제 (0) | 2024.04.27 |
[ NestJS] [errror] No metadata for "User" was found. (0) | 2024.04.23 |