[java] Hibernate에서 데이터베이스 트랜잭션(Transaction) 롤백하는 방법은?

Hibernate는 객체 관계 매핑(ORM)을 지원하는 자바 오픈 소스 프레임워크로, 데이터베이스와의 통신을 처리하기 위해 트랜잭션을 사용합니다. 트랜잭션을 롤백하는 것은 트랜잭션이 완료되기 전에 변경 사항을 취소하는 것을 의미합니다. 이를 통해 애플리케이션에서 예외나 오류가 발생했을 때 데이터 일관성을 유지할 수 있습니다.

Hibernate에서 트랜잭션을 롤백하기 위해 다음과 같은 방법을 사용할 수 있습니다:

1. session 객체를 이용한 롤백

Session session = sessionFactory.openSession();
Transaction transaction = null;
try {
    transaction = session.beginTransaction();
    
    // 트랜잭션 실행 로직
    
    transaction.commit(); // 트랜잭션 커밋
} catch (Exception e) {
    if (transaction != null) {
        transaction.rollback(); // 예외 발생 시 트랜잭션 롤백
    }
} finally {
    session.close();
}

위의 코드에서는 beginTransaction() 메서드를 호출하여 트랜잭션을 시작하고, 예외가 발생하지 않을 때는 commit() 메서드를 호출하여 트랜잭션을 커밋합니다. 그러나 예외가 발생할 경우 rollback() 메서드를 호출하여 트랜잭션을 롤백합니다.

2. @Transactional 어노테이션을 이용한 롤백

Hibernate에서는 스프링 프레임워크와 연동하여 @Transactional 어노테이션을 사용하여 트랜잭션을 관리할 수 있습니다. 이 경우, 메서드에 @Transactional 어노테이션을 추가하면 해당 메서드 내에서 실행되는 모든 데이터베이스 작업은 하나의 트랜잭션으로 처리됩니다.

@Transactional
public void performDatabaseOperations() {
    // 트랜잭션 실행 로직
}

위의 코드에서는 @Transactional 어노테이션을 사용하여 performDatabaseOperations() 메서드 내의 데이터베이스 작업을 트랜잭션으로 처리합니다. 예외가 발생하면 자동으로 롤백됩니다.

이러한 방법들을 사용하여 Hibernate에서 데이터베이스 트랜잭션을 롤백할 수 있습니다. 트랜잭션 롤백은 애플리케이션의 데이터 일관성을 유지하는 데 매우 중요합니다.

참고 자료: