Spring Data JPA

영속성 컨텍스트란

여행하는 개발자(SOO) 2024. 5. 30. 17:09
728x90

JPA에서 가장 중요한 2가지

  • 객체와 관계형 데이터베이스 매핑하기
  • 영속성 컨테이너

영속성 컨테이너를 제대로 이해하면 JPA가 내부적으로 어떻게 동작하는지 알 수 있다. 즉, JPA를 더 정확하고 효율적으로 사용이 가능하다.

EntityManager.persist(entity);

  • DB에 데이터를 저장하는 것이 아니라 JPA의 영속성 컨텍스트에 데이터를 저장

영속성 컨텍스트

  • 논리적인 개념
  • 엔티티 매니저를 생성할 때 하나의 영속성 컨텍스트가 생성된다.
  • 엔티티 매니저를 통해서 관리, 접근이 가능하다.

엔티티의 생명주기

  • 비영속(new/transient)
    • 한 번도 영속성 컨텍스트에 들어가지 않은 상태
  • 영속(managed)
    • 영속성 컨텍스트에 저장된 상태
  • 준영속(detached
    • 영속성 컨텍스트에 저장되었다가 분리된 상태
  • 삭제(removed)
    • 영속성 컨텍스트에서 삭제된 상태


[자바 ORM 표준 JPA 프로그래밍 3.2]

비영속

순수한 객체상태, DB, 영속성 컨텍스트와 전혀 관련이 없는 상태

영속

엔티티 매니저를 통해서 조회, 저장 등 행위를 했을 때 영속성 컨테이너에 등록이 되면 영속 상태라 한다. 영속성 컨테이너가 관리하는 엔티티는 영속 상태이다.

준영속

영속성 컨테이너에 의해 관리되던 엔티티가 영속성 컨테이너의 관리에서 벗어나면 준영속 상태라 한다.
em.detach(member) : 영속상태의 엔티티를 준영속 상태로 만든다.
em.close(), em.clear() 영속성 컨테이너를 닫거나 초기화시켜도 엔티티가 준영속 상태가 된다.

삭제

엔티티를 영속성 컨테이너나 DB에서 삭제한다.
em.remove(member)

728x90