JPA 영속성 컨텍스트

code_able·2024년 6월 1일
0
post-custom-banner

JPA 영속성 컨텍스트

JPA에서 영속성 컨텍스트(Persistence Context)는 엔티티를 관리하는 환경을 의미합니다. 영속성 컨텍스트는 엔티티 매니저(EntityManager)에 의해 관리되며, 엔티티 매니저는 엔티티의 생명 주기를 관리하고 데이터베이스 작업을 수행하는 데 사용됩니다. 영속성 컨텍스트는 다음과 같은 특징을 갖습니다:

1차 캐시:

영속성 컨텍스트는 엔티티의 1차 캐시 역할을 합니다. 이를 통해 동일한 엔티티에 대한 중복 쿼리를 방지하고, 엔티티를 효율적으로 관리할 수 있습니다.
예를 들어, 동일한 트랜잭션 내에서 동일한 엔티티를 여러 번 조회하면, 데이터베이스를 다시 조회하지 않고 1차 캐시에서 엔티티를 반환합니다.

엔티티 생명 주기:

엔티티는 영속성 컨텍스트 내에서 관리되며, 생명 주기에 따라 상태가 변합니다. JPA에서는 엔티티 상태를 크게 네 가지로 나눕니다:

  • 비영속(Transient): 엔티티가 새로 생성되었지만 아직 영속성 컨텍스트에 저장되지 않은 상태.

  • 영속(Managed):
    엔티티가 영속성 컨텍스트에 저장되어 관리되고 있는 상태.

  • 준영속(Detached):
    엔티티가 한때 영속성 컨텍스트에 저장되었지만 현재는 분리된 상태.

  • 삭제(Removed):
    엔티티가 영속성 컨텍스트에서 삭제된 상태.

변경 감지(Dirty Checking):

영속성 컨텍스트는 관리 중인 엔티티의 변경 사항을 추적합니다. 트랜잭션이 커밋될 때, 변경된 엔티티는 자동으로 데이터베이스에 반영됩니다.
변경 감지를 통해 개발자는 엔티티 상태를 명시적으로 업데이트할 필요 없이 편리하게 데이터 변경을 처리할 수 있습니다.

 Product product = new Product();
 product.setName("Laptop");
 product.setPrice(1200.00);
 em.persist(product);
 em.getTransaction().commit();

JPA 영속성 관련 주요 개념

  • EntityManager는 JPA의 핵심 인터페이스로, 영속성 컨텍스트를 관리하고 엔티티의 생명 주기를 제어하는 데 사용됩니다. 주로 엔티티의 생성, 조회, 업데이트, 삭제 작업을 수행합니다.
    Entity Transaction:

  • 트랜잭션은 일련의 데이터베이스 작업을 하나의 단위로 묶어 관리합니다. JPA에서는 EntityManager를 통해 트랜잭션을 시작하고 커밋 또는 롤백할 수 있습니다.
    Cascade:

  • JPA에서 연관된 엔티티 간의 작업을 전이(Cascade) 시킬 수 있습니다. 예를 들어, 부모 엔티티를 저장할 때 자식 엔티티도 함께 저장되도록 설정할 수 있습니다.
    Fetch Type:

  • 엔티티의 연관 필드를 가져오는 방식으로, 즉시 로딩(EAGER)과 지연 로딩(LAZY)이 있습니다. 즉시 로딩은 연관된 엔티티를 즉시 가져오는 반면, 지연 로딩은 실제로 사용할 때 가져옵니다.

profile
할수 있다! code able
post-custom-banner

0개의 댓글