Transaction

JPA Transaction

EntityManager EntityTransaction

JPA Transaction Propagation

Transaction

트랜잭션은 하나의 작업 단위를 의미하는데, 여러 작업을 묶어 논리적으로 하나의 작업처럼 처리할 수 있음

트랜잭션 ACID 속성

JPA Transaction

JPA를 이용하여 트랜잭션을 관리할 수 있음

JPA 트랜잭션 관련 객체: EntityManager, EntityTransaction

EntityManager, EntityTransaction

EntityManager는 데이터베이스와의 연결을 관리하며 트랜잭션 경계를 설정함 (명시적인 트랜잭션 관리)

persist merge remove와 같은 작업은 트랜잭션 내에서 실행됨

엔티티 매니저는 트랜잭션이 끝나면 더 이상 사용할 수 없음

트랜잭션 범위 내에서만 엔티티를 조작할 수 있으며 트랜잭션 커밋 시 영속성 컨텍스트에 관리되고 있는 엔티티들이 데이터베이스에 반영됨

예시 코드

/*
    EntityTransaction 객체 반환 메서드
    EntityTransaction의 begin(), commit(), rollback() 메서드를 통해 명시적으로 트랜잭션을 관리함
*/
EntityTransaction transaction = entityManager.getTransaction();

try {
    // 트랜잭션 시작
    transaction.begin();
    
    // 영속성 컨텍스트에 엔티티 영속화, 트랜잭션 범위 내에서만 엔티티 매니저 사용
    entityManager.persist(simpleEntity);
    
    //트랜잭션 커밋
    transaction.commit();
} catch (Exception e) {
    
    // 예외 발생 시 트랜잭션 롤백
    transaction.rollback();
} finally {
    
    // 엔티티 매니저 종료
    entityManager.close();
}

JPA Transaction Isolation Level

JPA는 기본적으로 데이터베이스의 격리 수준을 따름

별도의 트랜잭션 격리 수준 설정을 지원하지 않으며, 데이터베이스 또는 스프링으로 설정할 수 있음

JPA Transaction Propagation

JPA 자체에서 트랜잭션 전파 기능을 지원하지 않음

스프링의 트랜잭션 관리로 보완할 수 있음