JPA의 영속성 관리

반응형
728x90
반응형

영속성 컨텍스트

JPA에서 영속성 컨텍스트란, 엔터티를 영구 저장하는 환경을 말한다. 영속성 컨텍스트는 우리가 개발하면서 직접 관리할 수 없다. 영속석 컨텍스트는 논리적인 개념이고 눈에 보이지 않는다. 

 

엔터티 매니저를 통해서 영속성 컨텍스트에 접근이 가능하다.
EntityManager.persist(entity);

 

 

 

 

영속성 컨텍스트 엔티티의 생명주기

1) 비영속

영속성 컨텍스트와 전혀 관계가 없는 새로운 상태

 

2) 영속

영속성 컨텍스트에 관리되는 상태

 

3) 준영속

영속성 컨텍스트에 저장되었다가 분리된 상태

 

4) 삭제

영속성 컨텍스트에서 삭제된 상태

 

 

 

 

생명주기 관리

비영속 상태
Member member = new Member();
Member.setId(“aa”);

 

영속 상태
Member member = new Member();
EntityManager em = emf.createEntityManager();

em.getTransaction().begin() ;

em.persist(member); // 영속성 상태를 얻는다.

 

객체가 영속 상태가 된다고 해서, 해당 시점에 DB 쿼리가 수행되지 않는다. 트랜잭션이 commit() 되는 시점에 쿼리가 수행된다는 점에 유의하자.

 

 

준영속 상태
em.detach(member); // 영속성 을 지운다.

 

 

삭제 상태 만들기
em.remove(member); // 객체를 삭제한 상태

 

 

 

 

1차 캐시, 2차 캐시

id "aa" 값에 해당하는 데이터와 다른 "bb"의 데이터를 조회하면 당연히 다른 데이터이므로 캐시로 조회하지 않고 DB 조회를 수행한다. 

em.persist(member); // 1차 캐시
em.find(Member.class, “aa”); 
em.find(Member.class, “bb”); // 2차 캐시 (1차 캐시에 없으므로 DB조회)

em.find(Member.class, “aa”);  // 2차 캐시

 

 

 

 

동일성 보장

Member findMember1 = em.find(Member.class, “aa”);
Member findMember2 = em.find(Member.class, “aa”);

findMember1 == findMember2 // †rue -> 동일성이 보장된다.

 

같은 id 로 조회해온 객체는 동일성이 보장된다.

 

 

 

더 많은 내용으로 업데이트된 포스팅 바로가기

https://devfunny.tistory.com/814

 

[JPA 프로그래밍] 2. 영속성 관리

엔티티 매니저 데이터베이스를 하나만 사용하는 애플리케이션은 일반적으로 EntityManagerFactory를 하나만 생성한다. EntityManagerFactory emf = Persistence.createEntityManagerFactory("jpabook"); 위 코드를..

devfunny.tistory.com

 

반응형

Designed by JB FACTORY