더미데이터를 작성하던 도중 겪었던 문제를 포스팅 하려고합니다.

 

우선 save는 JpaRepository에 내장되어있는 메소드입니다.

save가 수행하는 작업은 insert와 update 이렇게 두가지입니다.

insert와 update로 나뉘는 기준은 select를 했을 때 PK가 있으면 update, 없으면 insert입니다. (물론 null이어도 insert입니다.)

 

우선 User Entity를 작성합니다.

PK는 id이고 auto_increment 속성을 추가하였습니다.

 

그리고 UserRepository를 생성만 해줍니다.

어차피 JpaRepository 내장메소드인 save를 사용하므로 내용은 없습니다.

 

그리고 UserRepository에 대한 Test를 작성해주고 실행합니다.

 

어? save를 두번했으니 2L아닌가요??

심지어는 두번째로 save한 데이터로 덮어져 있습니다.

 

sql문 실행 로그를 확인해보았더니 insert를 했다가 update를 합니다.

 

사실 확인을 위해 save이후의 id를 확인해보았습니다.

 

여기서 insert 직후 id가 1로 출력이 되었습니다.

save(user)를 하였는데 user에 자동으로 insert된 row가 저장되는 모양입니다.

 

이를 해결하기 위해서는 두 번째 save를 하기 전에 id를 null로 바꿔주어야합니다.

user.setId(null);을 추가합니다.

 

이제 insert가 두 번 되었음을 확인할 수 있습니다.

 

db에도 잘 들어갔네요!

 

save를 하면 Entity 객체에 자동으로 값이 들어간다는 사실을 몰라서 겪었던 상황이었습니다.

+ Recent posts