<aside> 1️⃣ 영속성이란?

</aside>

<aside> 2️⃣ 엔티티의 생명주기

</aside>

<aside> 3️⃣ 영속성 컨텍스트

</aside>

EntityManagerFactory emf = Persistence.createEntityManagerFactory("persistence-unit");
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();

// 영속 상태
Member member = new Member();
member.setId("ID1");
member.setName("홍길동");
em.persist(member);

em.getTransaction().commit();

<aside> 4️⃣ EntityManager와 영속성 컨텍스트 - 자세한 설명

</aside>

JPA의 영속성은 "EntityManager"를 중심으로 구성된다. EntityManager는 영속성 컨텍스트에 엔티티를 저장하고 관리하는 역할을 한다.

EntityManager와 영속성 컨텍스트

// EntityManager 생성
EntityManager em = emf.createEntityManager();

// 엔티티 영속화
Member member = new Member("id1", "John Doe");
em.persist(member);

// EntityManager 종료 (영속성 컨텍스트도 종료됨)
em.close();

영속성 컨텍스트의 이점

  1. 1차 캐시: 영속성 컨텍스트는 내부에 1차 캐시를 가지고 있다. 이는 엔티티의 ID를 키로, 엔티티 인스턴스를 값으로 가지는 맵으로 구현되어 있다. 이를 통해 같은 트랜잭션에서 동일한 엔티티를 조회할 경우, 데이터베이스에 접근하지 않고 1차 캐시에서 조회하여 성능 향상을 이뤄낸다.
  2. 동일성 보장: 같은 트랜잭션 내에서는 영속성 컨텍스트가 1차 캐시를 통해 동일성(==)을 보장한다. 즉, 같은 엔티티 인스턴스에 대한 비교는 항상 true를 반환한다.