솔솔
[JPA] @Modifying과 @Transactional의 연관성 본문
반응형
🍀 @Modifying과 @Transactional
Spring 프레임워크에서 데이터베이스와의 상호작용을 제어하기 위해 자주 사용되는 어노테이션
🍀 @Modifying / @Query
@Modifying 어노테이션은 Spring Data JPA에서 사용되며 DML 쿼리(UPDATE, DELETE, INSERT)가 실행될 것임을 명시
- @Query 어노테이션과 함꼐 사용되며 반환 타입이 void, int, 또는 boolean
- int는 수정된 행의 수를 반환을 나타냄
- boolean은 작업의 성공 여부를 나타냄
// .. 레파지토리 클래스
@Modifying // DML에선 필수 설정
@Query("update Emp2 e set e.deptno=:deptno where e.empno=:empno")
public int updateByEmpnoDeptno(@Param("empno") int empno, @Param("deptno") int deptno);
🍀 @Transactional
트랜잭션 경계(시작과 종료)를 정의하는 데 사용되는 어노테이션.
- @ Transactional을 사용하면 해당 메서드의 데이터베이스 작업이 트랜잭션 내에서 수행됨.
- 트랜잭션이 성공적으로 완료 → commit
- 트랜잭션이 실패 → rollback
- service에서 주로 작업
// .. 서비스 클래스
@Override
@Transactional
public boolean updateDeptnoByEmpno(int empno, int newDeptno) throws NotExistEmp2Exception {
int result = empDao.updateByEmpnoDeptno(empno, newDeptno);
if (result != 1) {
throw new NotExistEmp2Exception("사번에 일치되는 사원이 없습니다");
}
return true;
}
🍀 @Modifying과 @Transactional의 연관성
@Modifying 어노테이션이 적용된 메서드는 데이터베이스의 상태를 변경하는 작업을 수행하기 때문에 이러한 메서드는 트랜잭션 내에서 실행되는 것이 중요함. 따라서 @Transactional과 함께 사용되어 데이터 변경 작업이 트랜잭션으로 보호받을 수 있도록 해야 함.
만약에 @Transactional을 사용하지 않으면 데이터베이스 상태 변경 중 오류가 발생했을 때 롤백이 되지 않을 수 있음.
🌥️ 마이 띵킹 🌥️
Spring Data JPA를 처음 학습할 때는 @Modifying과 @Transactional의 개념이 어려워서 제대로 이해하지 못했지만 이번 공부를 통해 이 어노테이션들이 왜 필요한지 명확히 알게 되었다. 그동안 코드 연습에서는 이 어노테이션들을 생략하거나 잘못 사용한 적도 있었지만 이제는 그 중요성을 이해하게 되었다.
특히 @Modifying과 @Transactional의 다양한 옵션들에 대해 알아보았는데 앞으로 프로젝트를 진행하면서 다양한 에러를 경험하고 그 과정에서 이 옵션들이 왜 필요한지 더 깊이 이해하게 될 것이라고 기대하고 있다. Spring Data JPA는 쉬운 것 같으면서도 깊이 있는 주제이기 때문에 끝까지 마스터하기 위해 노력할 것이닷!! 홧팅!!
'나의보물들 > JPA' 카테고리의 다른 글
[JPA] JPA에서 @Transactional 없으면 UPDATE가 실행되지 않는 이유 (0) | 2025.03.20 |
---|---|
[JPA] 트러블 슈팅 : build.gradle 설정 오류 (0) | 2024.08.10 |
[JPA] JPA란? (0) | 2024.08.01 |