영속성 컨텍스트

김수환·2023년 10월 31일
0

영속성 컨텍스트?

엔티티를 영구 저장하는 환경

  • 영속성 컨텍스트는 애플리케이션과 DB 사이에서 객체를 보관하는 가상의 DB 역할을 한다.
  • 엔티티 매니저(EntityManager)를 통해 엔티티를 저장하거나 조회하면 엔티티 매니저는 영속성 컨텍스트에 엔티티를 보관하고 관리하게 된다.

엔티티 생명주기

비영속(new/transient)

영속성 컨텍스트와 관계가 없는 상태

Member member = new Member();
member.setId("1");
member.setUsername("messi");

영속

영속성 컨텍스트에 저장된 상태

Member member = new Member();
member.setId("1");
member.setUsername(“messi”);
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
em.persist(member); // 영속 컨텍스트에 저장

준영속

영속성 컨텍스트에 저장되었다가 분리된 상태

em.detach(member);

삭제

삭제된 상태

em.remove(member);

영속성 컨텍스트의 특징

캐시

영속 상태의 엔티티를 영속성 컨텍스트에 저장한다. 영속성 컨텍스트에서 조회하여 엔티티가 존재한다면 DB를 찾아보지 않아도 된다.
캐시로써 기능한다.

영속성 컨텍스트의 식별자 값

영속성 컨텍스트는 엔티티를 식별자 값으로 구분한다. 영속 상태는 식별자 값이 반드시 있어야 한다.

영속성 컨텍스트와 데이터베이스 저장

JPA는 보통 트랜잭션을 커밋하는 순간 영속성 컨텍스트에 새로 저장된 엔티티를 데이터 베이스에 반영하는데 이를 flush라 한다.

동일성 보장

SQL 조회를 통해 객체를 생성할 경우 매번 생성되는 객체가 다를 것이다. 하지만 영속성 컨텍스트를 내부에서는 엔티티의 ID 값을 기준으로 ID 값이 같다면 두 객체는 동등하다는 것을 보장해준다.

profile
hello human

0개의 댓글