실행결과 :
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
'자바 스프링 > 부트 블로그 JPA 프로젝트' 카테고리의 다른 글
#15 메인화면 만들기 (0) | 2022.05.08 |
---|---|
#14 delete 테스트, Exception 처리하기 (0) | 2022.05.07 |
#12 select 테스트 및 페이징 (0) | 2022.05.06 |
#11 insert 테스트와 enum 사용법 (1) | 2022.05.06 |
#10 연관관계에 대한 이해 (0) | 2022.05.05 |