티스토리 뷰

★  준영속이란?

- 준영속 상태는 영속성 컨텍스트가 관리하는 영속 상태의 엔티티가 영속성 컨텍스트에서 분리된 상태를 말한다. 

 


 

☆ 영속 상태의 엔티티를 준영속 상태로 만드는 방법

 

1. em.detach(entity) : 특정 엔티티만 준영속 상태로 전환한다.

2.  em.clear( ) : 영속성 컨텍스트를 완전히 초기화한다.

3.  em.close( ) : 영속성 컨텍스트를 종료한다.


☆ 준영속 상태의 특징

 

1. 거의 비영속 상태에 가깝다.

- 영속 컨텍스트가 관리하지 않는다.

  그래서 1차 캐시, 쓰기 지연 등등 영속성 컨텍스트가 제공하는 어떠한 기능도 동작하지 않는다.

 

2. 식별자 값을 가지고 있다.

- 준영속 상태는 이미 한 번 영속 상태였으므로 반드시 식별자 값을 가지고 있다.

 

3. 지연 로딩을 할 수 없다.

-  준영속 상태는 영속성 컨텍스가 더는 관리하지 않으므로 지연 로딩시 문제가 발생한다. 

 


☆ 병합: merge( )

 

- 준영속 상태의 엔티티를 다시 영속 상태로 변경하려면 병합을 사용하면 된다. 

  merge( ) 메소드는 준영속 상태의 엔티티를 받아서 그 정보로 새로운 영속 상태의 엔티티를 반환한다. 

 

public class ExamMergeMain {

	EntityManagerFactory emf = 
			Persistence.createEntityManagerFactory(("jpabook");

	public static void main(String[] args) {

		Member member = createMember("memberA", "회원1");

		member.setUsername("회원명변경");

		mergeMember(member);
	}

	static Member createMember(String id, String username) {
		// == 영속성 컨텍스트1 시작 ==//

		EntityManager em1 = emf.createEntityManager();

		EntityTransaction tx1 = em1.getTransaction();

		tx1.begin();

		Member member = new Member();
		member.setId(id);
		member.setUsername(username);

		em1.persist(member);
		tx1.commit();

		em1.close(); // 영속성 컨텍스트1 종료,
						// member 엔티티는 준영속 상태가 된다.
		// == 영속성 컨텍스트1 종료 ==//

		return member;
	}

	static void mergeMember(Member member) {
		// == 영속성 컨텍스트2 시작 ==//

		EntityManager em2 = emf.createEntityManager();

		EntityTransaction tx2 = em2.getTransaction();

		tx2.begin();
		Member mergeMember = em2.merge(member);
		tx2.commit();

		// 준영속 상태
		System.out.println("member = " + member.getUsername());

		// 영속 상태
		System.out.println("mergeMember = " + mergeMember.getUsername());

		System.out.println("em2 contains member = " + em2.contains(member));

		System.out.println("em2 contains mergeMember = " + em2.contains(mergeMember));
		em2.close(); // 영속성 컨텍스트2 종료,

		// == 영속성 컨텍스트2 종료 ==//

	}

}

http://www.kyobobook.co.kr/product/detailViewKor.laf?ejkGb=KOR&mallGb=KOR&barcode=9788960777330&orderClick=LAG&Kc=

 

자바 ORM 표준 JPA 프로그래밍 - 교보문고

스프링 데이터 예제 프로젝트로 배우는 전자정부 표준 데이터베이스 프레임 | ★ 이 책에서 다루는 내용 ★■ JPA 기초 이론과 핵심 원리■ JPA로 도메인 모델을 설계하는 과정을 예제 중심으로

www.kyobobook.co.kr