JPA의 영속성 컨텍스트는 엔티티를 관리하는 메모리 공간입니다. 영속성 컨텍스트는 EntityManager를 통해 접근하며, 애플리케이션과 DB 사이에서 엔티티의 생명주기를 관리합니다.
엔티티 생명주기
비영속(New)
영속성 컨텍스트와 관계없는 새로운 객체
Member member = new Member();
영속(Managed)
영속성 컨텍스트에서 관리되는 상태
em.persist(member);
Member found = em.find(Member.class, 1L);
준영속(Detached)
영속성 컨텍스트에서 분리된 상태
em.detach(member);
em.clear();
삭제(Removed)
삭제 예정 상태
em.remove(member);
핵심 기능
1차 캐시
같은 트랜잭션에서 동일 엔티티 조회 시 캐시에서 반환. DB 접근 최소화.
동일성 보장
같은 식별자로 조회한 엔티티는 == 비교 시 true.
쓰기 지연
SQL을 모아뒀다가 커밋 시점에 한번에 전송.
변경 감지(Dirty Checking)
영속 엔티티의 변경사항을 자동 감지해 UPDATE SQL 생성.
Member member = em.find(Member.class, 1L);
member.setName("변경"); // 자동으로 UPDATE SQL 생성됨