본문 바로가기
Jpa

jpa merge vs persist 동작방식 및 목적 정리

by 무대포 개발자 2021. 6. 25.
728x90
반응형

jpa merge vs persist 동작방식 및 목적 정리

  • merge, persist 동작방식 및 목적을 정리했습니다.

merge

  • merge 는 오직 분리된(detached) 엔티티에만 필요합니다.
  • 예를 들면 다음과 같습니다.
    • 아래와 같이 test 라는 entity 를 persist 를 통해 영속성 상태로 만들었습니다.
    • 그런 뒤 entityManager 를 close 해서 test 가 준영속 상태가 됐다고 가정하겠습니다.
    • 이런 경우 준영속 상태인 것의 상태를 변경해서 database 에 반영하고 싶습니다. 이럴 때 merge 를 사용해야 합니다.

Test test = new Test();
test.setName("abc");
entityManager.persist(test);

entityManager.close();

merge 동작 방식

  • 위 예제를 통해 설명하면, test 라는 entity 의 name 을 "abc" --> "cba" 로 변경해서 db 에 반영하고 싶습니다.
  • 아래와 같이 merge 를 수행하면 다음과 같이 동작합니다.
    • 1차 캐시에 해당 식별자가 있는지 확인하고 없으면 database 를 조회합니다.
    • database 에 값이 있으면 해당 값을 받아오고, 입력받은 test 객체의 값을 복사해서 database 에서 가져온 객체에 copy 를 합니다.
    • 그런 뒤 db 에 변경사항을 반영합니다.
    • 즉, 이 경우에는 select 후 insert 가 일어납니다.

test.setName("cba");

entityManager.merge(test);

persist

  • persist 는 새로운 entity 를 영속성 컨텍스트내에서 관리하고 싶을 때 사용합니다.
  • entityManager.persist(xxx) 를 호출하면 바로 insert 쿼리가 동작합니다.

reference

댓글