금일 프로젝트 과제를 진행하다가 아래의 문제를 발견하였다.
문제점 : 수정 전 데이터를 메세지로 사용자에게 수정 후 데이터와 같이 보내려 했는데, 같은 메세지가 전송됨
ex) A에서 B로 변경되었습니다. -> B에서 B로 변경되었습니다 하는 문제점 발생
해결 : save(entity2)를 하기 전에 entity1의 필드값을 임시 저장하는 String 변수를 두어 과제 해결
문제 발생이유 :
Builder로 생성한 엔티티 객체(entity1)를 수정하기 위해, entity2 = toBuilder()로 생성하고 save(entity)를 하니 entity1의 값이 모두 entity2와 동일하게 변경되었다.
근본적 이유 : 친구에게 도움을 요청해서 GPT에게 물어본 결과, 아래의 답변을 얻었다.
GPT 답변 원본 : 실제로 entity2를 저장하면, 영속성 컨텍스트에서 관리되는 entity1의 값이 변경됩니다. 이는 entity2가 영속성 컨텍스트에 저장될 때, 이미 동일한 id값을 가진 entity1이 영속성 컨텍스트에 존재하기 때문입니다. 따라서, 영속성 컨텍스트는 이 두 엔티티가 동일한 객체라고 판단하고, entity2의 값을 entity1에도 반영합니다.
만일 두 객체를 다르게 사용할 필요가 있다면 id를 다르게 하거나, 이미 존재하는 엔티티를 수정하여 저장하는 방법 등 사용해야 함.
-> builder는 toBuilder를 해야할텐데.. setter 짱인가.. 무튼 주의가 필요하다!
본인은 본 과제에서는 굳이 다르게 놔둘 필요가 없어 임시 변수로 해결하였음.