11.7.2.3. 트랜잭션 롤백

다음 절차에서는 자카르타 트랜잭션을 사용하여 트랜잭션을 롤백하는 방법을 설명합니다.

사전 요구 사항

트랜잭션을 롤백하려면 먼저 트랜잭션을 시작해야 합니다. 트랜잭션을 시작하는 방법에 대한 자세한 내용은 트랜잭션 시작을 참조하십시오.

  1. UserTransaction 에서 rollback() 메서드를 호출합니다.

    UserTransaction 에서 rollback() 메서드를 호출할 때 4.6은 트랜잭션을 롤백하고 데이터를 이전 상태로 되돌립니다.

    @Inject
    private UserTransaction userTransaction;
    
    public void updateTable(String key, String value)
        EntityManager entityManager = entityManagerFactory.createEntityManager();
        try {
            userTransaction.begin():
            <!-- Perform some data manipulation using entityManager -->
              ...
              // Commit the transaction
            userTransaction.commit();
        } catch (Exception ex) {
            <!-- Log message or notify Web page -->
            ...
            try {
                userTransaction.rollback();
            } catch (SystemException se) {
                throw new RuntimeException(se);
            }
            throw new RuntimeException(e);
        } finally {
            entityManager.close();
        }
    }
  2. CMT(컨테이너 관리 트랜잭션)를 사용하는 경우 트랜잭션을 수동으로 롤백할 필요가 없습니다.

    컨테이너 관리 트랜잭션을 사용하도록 빈을 구성하는 경우 컨테이너는 코드에서 구성하는 주석을 기반으로 사용자의 트랜잭션 라이프사이클을 관리합니다.

참고

RuntimeException이 throw되면 CMT의 롤백이 발생합니다. setRollbackOnly 메서드를 명시적으로 호출하여 롤백을 얻을 수도 있습니다. 또는 롤백하려면 애플리케이션 예외에 @ApplicationException(rollback=true)을 사용합니다.

결과

귀하의 트랜잭션이 자동으로 롤백됩니다.

참고

전체 예는 Jakarta Transactions 트랜잭션 예제 를 참조하십시오.