영속성관리

 

 

영속성관리 

영속성 컨텍스트를 먼저 알아야 합니다.

 

영속성 컨텍스트란 "엔티티를 영구 저장하는 환경"이라는 의미입니다.

 

영속성 컨텍스트는 엔티티를 저장하고 관리하는 메모리 내의 1차 캐시 역할을 합니다.

영속성 컨텍스트의 주요 특징

  1. 엔티티 관리: 영속성 컨텍스트는 데이터베이스에서 가져온 엔티티를 캐시하여, 동일한 엔티티를 여러 번 조회할 때 매번 데이터베이스에 접근하지 않고 메모리에서 가져올 수 있게 합니다. 이를 통해 성능이 향상됩니다.
  2. 변경 감지(Dirty Checking): 영속성 컨텍스트에 관리되는 엔티티는 상태가 자동으로 감지됩니다. 트랜잭션이 끝날 때, 변경된 엔티티를 자동으로 데이터베이스에 반영합니다. 즉, 개발자가 직접 UPDATE 쿼리를 작성하지 않아도 변경 사항을 자동으로 반영해줍니다.
  3. 동일성 보장: 영속성 컨텍스트 내에서는 동일한 식별자를 가진 엔티티는 하나만 존재합니다. 즉, 같은 트랜잭션 내에서 동일한 ID를 가진 엔티티를 조회할 때, 항상 동일한 객체가 반환됩니다.
  4. 트랜잭션과의 연관성: 영속성 컨텍스트는 보통 하나의 트랜잭션 단위로 유지되며, 트랜잭션이 종료되면 영속성 컨텍스트도 종료되어 관리하던 엔티티들이 더 이상 영속적이지 않게 됩니다.

영속성 컨텍스트의 상태 (엔티티의 생명주기)

  • 비영속 (Transient): 데이터베이스와 전혀 관계없는 상태의 객체. 영속성 컨텍스트에는 객체가 없고 코드에서 객체를 생성만 한 상태이다.
Member member = new Member();  //Member 엔티티
member.setId("member1");
member.setUsername("회원1");

 

  • 영속 (Persistent): 영속성 컨텍스트에서 관리되고 있는 상태. 영속성 컨텍스트에 해당 엔티티 객체가 관리되고 있음.
Member member = new Member();  //Member 엔티티
member.setId("member1");
member.setUsername("회원1");

//영속화 작업을 위해 영속화 작업을 도와주는 엔티티매니저 생성
EntityManager em = emf.createEntityManager();
//트랜젝션의 시작을 알림
em.getTransaction().begin();

//객체를 저장한 상태 (영속) 영속상태가 된다해서 DB에 바로 반영되는 것이 아니다.
//트랜젝션을 커밋하는 시점에 DB에 반영됩니다. 
em.persist(member)
  • 준영속 (Detached): 한 번 영속성 컨텍스트에서 관리되었으나, 더 이상 관리되지 않는 상태.
  • 삭제 (Removed): 삭제 예약된 상태로, 트랜잭션이 커밋되면 실제로 데이터베이스에서 삭제됨.

영속성 컨텍스트는 JPA가 제공하는 트랜잭션 범위에서의 데이터 일관성과 효율적인 데이터베이스 액세스를 위한 핵심적인 메커니즘입니다.

 

 

EntityManager를 통해 엔티티들을 통해 영속성 컨텍스트를 관리하는 역할을 합니다.

EntityManagerFactory를 통해 생성되며, 이를 통해 데이터베이스와 상호작용하는 모든 작업이 이루어집니다.

 

JPA 구동 순서 요약

  1. EntityManagerFactory 생성
  2. EntityManager 생성
  3. 트랜잭션 시작
  4. 엔티티 저장/조회/수정/삭제
  5. 트랜잭션 커밋(데이터베이스 반영)
  6. EntityManager 및 EntityManagerFactory 종료

 

'JPA' 카테고리의 다른 글

[JAVA]JPA_즉시로딩과 지연로딩  (0) 2024.10.30
[JAVA] JPA_상속관계 매핑  (0) 2024.10.27
[JAVA] JPA_연관관계  (0) 2024.10.27
[JAVA] JPA_연관관계 매핑  (0) 2024.10.27
[JAVA] JPA란?  (0) 2024.10.18

+ Recent posts