728x90

초반부에 빠르게 넘어갔던 영속 컨텍스트와 LifeCycle에 대해 좀 더 자세히 알아보자.

 

  • 영속 컨텍스트

영속 엔티티는 DB 데이터에 매핑되는 메모리상의 객체이다.

엔티티라고 하면 우리가 무수히 만들었던 Entity가 생각이 날 것이다.

 

영속 컨텍스트는 메모리 저장소로 엔티티들을 보관하고 있다.

EntityManager로 관리를 하며, EntityManager.close()를 호출하면 영속 컨텍스트를 제거한다.

영속 컨텍스트는 동일 식별자를 가지면 그 엔티티들은 동일한 엔티티로 판단한다.

 

그렇기 때문에

System.out.println("first find");
User first = entityManager.find(User.class, email1);
System.out.println("second find");
User second = entityManager.find(User.class, email2);
logger.info("same object: {}", (first == second));

이렇게 동일 식별자를 가진 데이터를 2번 조회하게 되면

first find
select로 해당 데이터 조회
second find
//select 쿼리가 실행되지 않음
same object: true

이렇게 조회하는 쿼리가 한 번만 실행되는데, 같은 엔티티라고 판단해서 다시 조회하지 않고 영속 컨테이너에서 가져오기 때문이다.

 

  • 영속 객체 LifeCycle

조회(find)나 persist()를 통해서 영속 컨텍스트에 저장이 된 객체는 관리 대상이 된다.

관리 대상에서 제외하고 싶으면 detach()를 사용하면 된다.

close()를 사용해도 manager가 닫히기 때문에 더 이상 관리되지 않는다.

 

'백엔드 > JPA' 카테고리의 다른 글

JPA 9장 (Map collection mapping)  (0) 2023.03.21
JPA 8장 (List collection mapping)  (0) 2023.03.18
JPA 7장 (Set collection mapping)  (0) 2023.03.18
JPA 6장 (@Embeddable)  (0) 2023.03.17
JPA 5장 (Entity 식별자 생성 방식)  (0) 2023.03.16

+ Recent posts