[Spring] Entity의 상태

yoon·2024년 3월 6일

spring-boot

목록 보기
15/41
post-thumbnail

✅ 비영속(Transient)

  • new 연산자를 통해 인스턴스화 된 객체
  • 아직 JPA의 관리를 받지 않는 상태
  • 변경 감지 못함

✅ 영속(Managed)

  • em.persist(객체) 영속성 컨텍스트에 저장된 상태

✅ 준영속(Detached)

  • em.detach(객체)영속성 컨텍스트에서 관리되다가 분리된 상태
  • 1차 캐시에서 삭제된 상태로 변경 감지 못함

✅ 메서드

em.contains()

  • 영속성 컨텍스트에 포함되어있는지 확인 가능한 메서드
  • true/false 반환한다.

em.clear()

  • 영속성 컨텍스트를 완전히 초기화하는 메서드
  • 영속성 컨텍스트의 모든 객체를 준영속 상태로 전환
  • 영속성 컨텍스트 틀은 유지하지만 내용은 비워져 있는 상태
  • 영속성 컨텍스트 계속해서 이용 가능

em.close()

  • 영속성 컨텍스트를 종료하는 메서드
  • 영속성 컨텍스트의 모든 객체를 준영속 상태로 전환
  • 영속성 컨텍스트가 종료되었기 때문에 계속해서 사용할 수 없다.

em.merge()

  • 준영속 상태에서 다시 영속 상태의 객체를 반환
  • 동작
    • 객체가 영속성 컨텍스트에 없다면?
      • db 조회
      • 조회한 객체 영속성 컨텍스트에 저장
      • 전달 받은 객체의 값을 사용하여 병합
      • update SQL 수행
    • db에도 없다면?
      • 새롭에 생성한 객체 영속성 컨텍스트에 저장
      • insert SQL 수행
    • 즉 비영속, 준영속 모두 파라미터로 받을 수 있으며 상황에 따라 저장, 수정 모두 가능

em.remove()

  • 삭제하기 위해 조회해온 영속 상태의 객체를 파라미터로 전달받아 삭제 상태로 전환
profile
하루하루 차근차근🌱

0개의 댓글