JPA 트랜잭션 관리

김명래·2023년 4월 4일
0

my-batis를 사용할때는 transaction을 관리하며 update나 delete query가 예상 외의 작업을 진행했을때 rollback을 진행했던 기억이 있다.
JPA ORM을 사용시에는 어떻게 해야할까 ?

트랜잭션(transaction) : 논리적 작업단위.

@Transaction

Transaction 을 자동으로 관리해준다. 예를 들어,

@Transaction
public void test(){
    repo.insert();
     repo.update();
}

test 함수가 실행되기전 트랜잭션이 시작되고 성공적으로 함수가 종료되면 commit한다.
insert query가 성공적으로 이루어지고 update에서 exception 이 발생하면 rollback하여 원자성을 보장한다.


@Transaction(readOnly = true)

readOnly로 설정했다면 해당 Transaction 안에서는 insert, delete, update query가 불가능하다.


@Transaction(isolation = Isolation.DEFAULT)

Transaction의 격리수준을 설정할 수 있다.
ex)

  • DEFAULT
  • READ_UNCOMMITTED (level 0)
  • READ_COMMITTED (level 1)
  • REPEATABLE_READ (level 2)
  • SERIALIZABLE (level 3)

@Transcation(rollbackFor=Exception.class) @Transcation(noRollbackFor=Exception.class)

runtime Exception 발생시 rollback한다. 혹은, 특정 예외 발생 시 rollback을 하지 않도록 할 수 있다.


@Transaction(timeout=10)

설정한 시간안에 transaction 이 종료되지 않았다면 rollback한다.

profile
독자보다 필자를 위해 포스팅합니다

0개의 댓글