jpa에서 객체를 save()할때
Class A
위와 같은 엔티티가 있다고 가정하면 (그냥 흐름 파악을 위해 문법에 안 맞는 코드로 작성하겠다.)
a = new A()
a.name = “name”
B = save(a)
위와 같이 A entity에 name만 정의하고 save를 하면 a 와 반환값 B는 EntityManger가 persist()를 호출하여 entitymange가 관리하고 있다. 그리고 두 객체는 동일한 값을 가르키고 있다. 그래서 save후에 a, b를 변경하면 그대로 db에 업데이트가 된다.
하지만
a = new A()
a.id = 1
a.name = “name”
B = save(a)
위와 같이 A entity에 a에 id, name을 정의하고 save를 하면 entitymanger는 merge()를 호출하여 B는 detached상태이고 a는 entitymanager가 관리하지 않는다. 그래서 나중에 a를 변경해도 쿼리에 영향이 안간다!
횡설수설하고 있고 잘못된 정보를 가지고 있을수도 있다!
아래 참조에 아주 잘 설명되어 있으니 나중에 다시 확인하고 리마인드하는 것이 좋을 것 같다.