@Transactional 과 영속성
2024. 8. 2. 14:55ㆍSpring Boot
Spring Data Jpa에서 @Transactional은 단순히 정상 작동 시 commit 그리고 에러시 rollback을 진행하는 줄 알았다.
그런데 @Transactional을 붙이면 영속 상태인 Entity의 변경 감지가 일어난다
따라서 Entity를 변경하고 따로 save등의 추가 조치가 없더라도 정상적으로 Trasaction이 닫히면 DB의 값이 수정 된다.
예제를 하나 보겠다
void persist_test(Long id) {
sqlEntity entity = repo.findById(id).get();
entity.setTitle("TESTSINGSN");
}
@Transactional(transactionManager = "myTran")
void persist_test2(Long id) {
sqlEntity entity = repo.findById(id).get();
entity.setTitle("TESTSINGSN");
}
service에 하나는 @Trasactional을 붙이고 하나는 안 붙인 뒤에 set함수를 이용해서 entity의 값을 수정하였다.

package com.example.demo.mySQL;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
public class mySQLServiceTest {
@Autowired
mySQLService service;
@Test
void testPersist_test() {
service.persist_test(1L);
}
@Test
void testPersist_test2() {
service.persist_test2(2L);
}
}

바뀐 entity를 따로 save 해주지 않았지만
@Transactional이 붙은 메소드에서는 값이 수정 되었음을 확인 할 수 있다.
이는 @Transactional 때문에 엔티티가 앞서 말한 변경 감지 되어서 값이 변경 된 것이다.
'Spring Boot' 카테고리의 다른 글
| WebMVC와 WebFlux를 동시 사용 할 경우 WebSocket (0) | 2024.08.14 |
|---|---|
| OSIV (0) | 2024.08.03 |
| Lazy Loading (0) | 2024.07.31 |
| Spring AOP (0) | 2024.07.10 |
| 여러 데이터 베이스 사용 시 Transaction (0) | 2024.07.10 |