Programming-[Backend]/Spring

[TIL] DB save 테스트 Id값 증가, Auto Increment 값은 transaction에 포함되지 않음

컴퓨터 탐험가 찰리 2021. 5. 2. 08:48
728x90
반응형

현상

@DataJpaTest를 이용하여 Save 테스트를 하면, 자동으로 Rollback이 되므로 DB 상에 데이터가 들어가지 않는다. 하지만, 여러 번 테스트 후에 Rollback을 하지 않고 실제 데이터를 넣어 보면, 아래와 같이 id값이 증가되는 것을 볼 수 있다.

원인

이것은 Auto increment가 적용되는 id 값은 rollback 되지 않기 때문이다. 정확하게는 Auto increment 값은 transaction에 포함되지 않기 때문에 내부적으로 id값이 증가하므로 실제 save 시에 증가된 id값이 적용되는 것이다.

 

 

해결

이런 경우 id 값을 ALTER TABLE {테이블명} auto_increment = {원하는 id값} 을 입력하여 변경해줄 수 있다.(참조1)

 

추가

Rollback 없이 id 값 확인

굳이 rollback이 안되도록 하여 실제 데이터값을 볼 필요가 없다. 한 Transaction 안이라도 아래와 같이 save 직후 값을 출력해보면 값 확인이 된다.

1
2
XxxEntity save = XxxRepository.save(newData);
System.out.println("id = " + save.getId());
cs

 

참조

1. zorba91.tistory.com/72

2. www.codeproject.com/Tips/1249849/Auto-Increment-Column-Value-is-Not-Part-of-Transac

728x90
반응형