@Transactional 과 영속성

2024. 8. 2. 14:55Spring 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