트랜잭션

ClassBinu·2024년 5월 21일

F-lab

목록 보기
31/65

The most important restriction when working in a transaction is to ALWAYS use the provided instance of entity manager - transactionalEntityManager in this example. DO NOT USE GLOBAL ENTITY MANAGER. All operations MUST be executed using the provided transactional entity manager.

await myDataSource.manager.transaction(async (transactionalEntityManager) => {
    await transactionalEntityManager.save(users)
    await transactionalEntityManager.save(photos)
    // ...
})

isolation levels

오, 멘토님에게 피드백 받은 isolation levels가 공식문서에 있었네.

첫 번째 파라미터도 isolation levels를 넘긴다.

await myDataSource.manager.transaction(
    "SERIALIZABLE",
    (transactionalEntityManager) => {},
)

standard isolaion levels

(MySQL, Postgres, SQL Server)

  • READ UNCOMMITTED
  • READ COMMITED
  • REPEATABLE READ
  • SERIALIZABLE

Oracle only supports the READ COMMITTED and SERIALIZABLE isolation levels.

queryRunner에서 트랜잭션 제어

  • startTransaction - starts a new transaction inside the query runner instance.
  • commitTransaction - commits all changes made using the query runner instance.
  • rollbackTransaction - rolls all changes made using the query runner instance back.

0개의 댓글