repository.save()
를 하면 엔티티가 하나 추가된다.
save()는 추가 뿐만 아니라 수정에도 사용한다.
save()는 이 객체가 새로운 객체인지 기존 객체인지 판단하여, 새로운 객체가 아닌경우 EntityManager의 merge쪽으로 보낸다.
EntityManager에는 persist()와 merge()가 있는데 persist()
는 Transient상태(새로 만들어진 객체)를 Persistent상태로 만들어주는 것이고, merge()
는 Detached상태(한 번이라도 DB에 Persistent가 됐었던 객체)를 Transient상태로 되돌려주는 것이다.
-> save()를 해도 반영이 안 될 수 도 있기 때문이다. persist인 경우는 리턴 값을 사용하지 않아도 반영되지만, merge인 경우는 반영되지 않는다.
Ex.
Post updatedPost
= postRepository.save(post); 가 있을때
post.setTitle("test") - x(이렇게 사용 x)
updatedPost
.setTitle("test") - O(리턴값 받아서 사용)