#13 update 테스트
실행결과 :
save를 통한 업데이트
실행결과 :
createDate와 role이 NULL로 나온다.
원래 save는 insert할 때 사용하는 것이다.
만약 save를 할 때 id값을 넘겨주면 만약 그 id가 데이터베이스에 있다면 그것을 업데이트한다.
그런데 문제는 위 코드에서 password와 email, username만 있기 때문에
다른 값들이 NULL로 변해버리는 문제가 발생한다.
따라서 업데이트 할 때는 save를 거의 사용하지 않는다.
만약 save를 통해 업데이트하고 싶다면 코드를 다음과 같이 작성하면 된다.
여기서의 user는 NULL이 없기 때문이다.
id==2의 유저를 업데이트 해보겠다.
실행결과 :
save 함수는 id를 전달하지 않으면 insert를 하고,
id를 전달하면 해당 id에 대한 데이터가 있으면 update를 하고,
id를 전달하면 해당 id에 대한 데이터가 없으면 insert를 한다.
@Transactional를 통한 업데이트
우선 save를 주석처리한다.
그리고 @Transactional 어노테이션을 추가한다.
@Transactional 어노테이션이란?
데이터베이스를 다룰 때 트랜잭션을 적용하면 데이터 추가, 갱신, 삭제 등으로 이루어진 작업을 처리하던 중
오류가 발생했을 때 모든 작업들을 원상태로 되돌릴 수 있다.
모든 작업들이 성공해야만 최종적으로 데이터베이스에 반영하도록 한다.
실행결과 :
save를 호출하지 않았는데 변경이 이루어졌다.
이렇게 @Transactional 어노테이션을 사용하면, save를 호출하지 않더라도 값을 변경하면
데이터가 update된다. 이를 더티체킹이라고 한다.

참고자료 : https://youtu.be/oijoJtiGPhI