개발정리

JPA-영속 컨텍스트 본문

스프링/JPA

JPA-영속 컨텍스트

coffee. 2023. 8. 30. 14:26

JPA의 영속 컨텍스트 구조

-Entity Manager의 persist 메서드를 호출하면 

 Entity Manager와 연결된 영속 컨텍스트에 엔티티 객체가 등록 된다.

-이후 영속 컨텍스트가 엔티티를 분석하여 SQL문을 DB에 전송

-영속 컨텍스트가 애플리케이션과 실제 DB를 연결해주는 버퍼 기능 제공

 

영속 컨테이너와 엔티티 상태

생성 엔티티가 컨테이너에 등록되지않은 상태
관리 엔티티가 컨테이너에 등록된 상태
분리 엔티티가 컨테이너에 등록되었다가 분리된 상태
삭제 엔티티가 컨테이너에서 삭제 처리된 상태

 

생성 상태

 

package com.woo.jpaTest.client;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;

import com.woo.jpaTest.entity.Member;

public class Test {

	public static void main(String[] args) {
		
		EntityManagerFactory emf=Persistence.createEntityManagerFactory("hello");
		
		EntityManager em =emf.createEntityManager();
		
		EntityTransaction tx=em.getTransaction();
		
		tx.begin();
		
		Member member=new Member();
		member.setName("Tom");
		
		
		tx.commit();
		
		
		

	}

}

생성 상태는 엔티티가 생성만 되고 영속 컨테이너에는 들어가지 않은 상태입니다.

생성 상태

이 상태에서는 db에 INSERT구문이 실행되지 않습니다.

 

 

관리상태

-엔티티가 영속 컨테이너의 관리를 받고 있는 상태입니다.

-persist 와 find 사용

 

 

EntityManagerFactory emf=Persistence.createEntityManagerFactory("hello");
		
		EntityManager em =emf.createEntityManager();
		
		EntityTransaction tx=em.getTransaction();
		
		tx.begin();
		
		Member member=new Member();
		member.setName("Tom");
		
		em.persist(member);
		
		tx.commit();

-persist메서드를 통해 INSERT구문이 성공적으로 실행 되었습니다.

-이 코드에서 INSERT가 실행되는 시점은 어디 일까요 바로 트랜잭션이 종료되는 시점입니다.

 

 

EntityManagerFactory emf=Persistence.createEntityManagerFactory("hello");
		
		EntityManager em =emf.createEntityManager();
		
		EntityTransaction tx=em.getTransaction();
		
		tx.begin();
		
		Member member=new Member();
		member.setName("Tom");
		
		em.persist(member);
		
		member.setName("sally");
		
		tx.commit();

이번에는 persist메서드를 이용해 영속 컨테이너에 등록후 엔티티의 속성을 변경 해봅시다.

그럼 다음과 같이 값이 변경 되는 것을 보실수 있습니다.

영속 컨테이너는 관리중인 엔티티의 값이 변경되는 것을 감지하여 UPDATE구문을 실행시킵니다.

이것을 "더티체킹" 이라고 합니다.

 

분리상태

-분리 상태는 엔티티가 영속 컨테이너에 등록되었다가 해제된 상태

-detach 또는 clear 사용

 

삭제상태

-영속 컨테이너에서 엔티티가  제거된 상태

-이때 실제 데이터베이스에서도 데이터가 삭제된다.

-remove사용

 

 

 

 

참조:JPA퀵스타트 , 채규태 

'스프링 > JPA' 카테고리의 다른 글

JPA-다대다 매핑  (0) 2023.09.02
JPA-일대일 매핑  (0) 2023.09.01
JPA-다대일 연관관계 매핑  (0) 2023.08.31
JPA-설정  (0) 2023.08.29