영속성 컨텍스트란?
- “엔티티를 영구 저장하는 환경”이라는 뜻
- EntityManager.persist(entity) : 엔티티를 영속성 컨텍스트에 저장
- EntityManager를 통해서 영속성 컨텍스트에 접근
엔티티의 생명주기
비영속 (new/transient)
- 영속성 컨텍스트와 전혀 관계가 없는 새로운 상태
영속 (managed)
- 영속성 컨텍스트에 의해 관리되는 상태
- em.persist(Member);를 하면 이 상태가 됨
준영속(detached)
- 영속성 컨텍스트에 저장되었다가 분리된 상태
삭제 (removed)
- 삭제된 상태
비영속 (new/transient)
- 객체를 생성만 하고 EntityManager에 넣지 않은 상태

영속 (managed)
- 객체가 영속 컨텍스트에 의해 관리되고 있는 상태
- em.persist(member)를 하면 EntityManager 안에 있는 영속 컨텍스트에 의해 Member가 관리됨

Copy
package hellojpa;
import jakarta.persistence.*;
import java.util.List;
public class JpaMain {
public static void main(String[] args) {
// Persistence가 EntityManagerFactory 생성
EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");
// EntityManagerFactory가 EntityManager 생성
EntityManager em = emf.createEntityManager();
EntityTransaction tx = em.getTransaction();
tx.begin();
try {
// 비영속
Member member = new Member();
member.setId(100L);
member.setName("HelloJPA");
// 영속
System.out.println("=== BEFORE ===");
em.persist(member);
System.out.println("=== AFTER ===");
tx.commit();
} catch (Exception e) {
tx.rollback();
} finally {
// 트랜잭션이 끝나면 반드시 EntityManager를 닫아야 함
em.close();
}
emf.close();
}
}
출력 결과

영속 상태em.persist(member)가 된다고 해서 DB에 쿼리가 날라가는 게 아니다!
tx.commit()을 통해 트랜잭션을 커밋하는 시점에 DB에 쿼리가 날라간다
영속 상태 (Managed State) 가 되었다고 해서 즉시 DB에 쿼리가 실행되는 것은 아닙니다. em.persist(member)를 통해 객체가 영속성 컨텍스트에 추가되지만, DB와의 동기화는 트랜잭션이 커밋되는 시점에서 이루어집니다.
준영속, 삭제

'Spring, JPA 🌱 > 김영한 JPA' 카테고리의 다른 글
[김영한 JPA] 준영속 상태 (detached) (0) | 2025.02.07 |
---|---|
[김영한 JPA] 플러시 (flush) (0) | 2025.02.07 |
[김영한 JPA] 영속성 컨텍스트(Pesistence Context)의 이점 (0) | 2025.02.07 |
[김영한 JPA] JPA 구동 방식 (0) | 2025.02.07 |
영속성 컨텍스트란?
- “엔티티를 영구 저장하는 환경”이라는 뜻
- EntityManager.persist(entity) : 엔티티를 영속성 컨텍스트에 저장
- EntityManager를 통해서 영속성 컨텍스트에 접근
엔티티의 생명주기
비영속 (new/transient)
- 영속성 컨텍스트와 전혀 관계가 없는 새로운 상태
영속 (managed)
- 영속성 컨텍스트에 의해 관리되는 상태
- em.persist(Member);를 하면 이 상태가 됨
준영속(detached)
- 영속성 컨텍스트에 저장되었다가 분리된 상태
삭제 (removed)
- 삭제된 상태
비영속 (new/transient)
- 객체를 생성만 하고 EntityManager에 넣지 않은 상태

영속 (managed)
- 객체가 영속 컨텍스트에 의해 관리되고 있는 상태
- em.persist(member)를 하면 EntityManager 안에 있는 영속 컨텍스트에 의해 Member가 관리됨

Copy
package hellojpa; import jakarta.persistence.*; import java.util.List; public class JpaMain { public static void main(String[] args) { // Persistence가 EntityManagerFactory 생성 EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello"); // EntityManagerFactory가 EntityManager 생성 EntityManager em = emf.createEntityManager(); EntityTransaction tx = em.getTransaction(); tx.begin(); try { // 비영속 Member member = new Member(); member.setId(100L); member.setName("HelloJPA"); // 영속 System.out.println("=== BEFORE ==="); em.persist(member); System.out.println("=== AFTER ==="); tx.commit(); } catch (Exception e) { tx.rollback(); } finally { // 트랜잭션이 끝나면 반드시 EntityManager를 닫아야 함 em.close(); } emf.close(); } }
출력 결과

영속 상태em.persist(member)가 된다고 해서 DB에 쿼리가 날라가는 게 아니다!
tx.commit()을 통해 트랜잭션을 커밋하는 시점에 DB에 쿼리가 날라간다
영속 상태 (Managed State) 가 되었다고 해서 즉시 DB에 쿼리가 실행되는 것은 아닙니다. em.persist(member)를 통해 객체가 영속성 컨텍스트에 추가되지만, DB와의 동기화는 트랜잭션이 커밋되는 시점에서 이루어집니다.
준영속, 삭제

'Spring, JPA 🌱 > 김영한 JPA' 카테고리의 다른 글
[김영한 JPA] 준영속 상태 (detached) (0) | 2025.02.07 |
---|---|
[김영한 JPA] 플러시 (flush) (0) | 2025.02.07 |
[김영한 JPA] 영속성 컨텍스트(Pesistence Context)의 이점 (0) | 2025.02.07 |
[김영한 JPA] JPA 구동 방식 (0) | 2025.02.07 |