병아리의 코딩 일기

[JPA] 영속성 컨텍스트란? 본문

자바 Java/Spring

[JPA] 영속성 컨텍스트란?

oilater 2023. 2. 15. 11:06

JPA에서 가장 중요한 2가지

 

1. 객체와 관계형 데이터베이스 매핑하기(ORM = Object Relational Mapping)

2. 영속성 컨텍스트

 


영속성 컨텍스트란?

 

  • JPA를 이해하는데 가장 중요한 용어
  • "엔티티를 영구 저장하는 환경"
  • EntityManager.persist(entity); -> 사실 db에 저장한다는 것이 아니라 엔티티를 영속성 컨텍스트라는 곳에 저장한다는 것!

 

 

엔티티 매니저? 영속성 컨텍스트?

 

  • 영속성 컨텍스트는 논리적인 개념이다.
  • 눈에 보이지 않는다.
  • 엔티티 매니저를 통해 영속성 컨텍스트에 접근한다.

EntityManager 를 실행하면 PersistenceContext 가 생성이 된다.

 


 

엔티티의 생명주기

엔티티는 생명주기가 4가지 있다. 

 

  • 비영속 : 최초에 entity를 생성한 상태. 영속성 컨텍스트와는 전혀 상관없는 새로운 상태
  • 영속: 영속성 컨텍스트에 관리되는 상태
  • 준영속: 영속성 컨텍스트에 저장되었다가 분리된 상태
  • 삭제: 삭제된 상태

 

1. 비영속

member 객체 생성(비영속 상태).

아직 영속 컨텍스트(entityManager)에 넣지 않은 상태.

 

//비영속
Member member = new Member();
member.setId(100L);
member.setName("HelloJPA");

 

2. 영속

멤버 객체를 생성을 한 후,

EntityManager 에 객체를 저장한 상태.

EntityManager를 통해서 객체가 관리가 된다.

사실은 이때도 DB에 저장되지 않는다.

 

//비영속
Member member = new Member();
member.setId(100L);
member.setName("HelloJPA");

//영속
em.persist(member);

 

영속상태가 된다고 해서 바로 Query 에 날라가는 것이 아니라,

Transaction을 커밋하는 시점에 영속성 컨텍스트에 있는 애가 쿼리에 날라가게 된다!

 

//비영속
Member member = new Member();
member.setId(100L);
member.setName("HelloJPA");

//영속
em.persist(member);

tx.commit();

 

3. 준영속

회원 엔티티를 영속성 컨텍스트에서 분리, 준영속 상태

em.detach(member);

 

4. 삭제

객체를 삭제한 상태

em.remove(member);

 


 

대체 영속성 컨텍스트는 무슨 이상한 메커니즘일까?

어플리케이션과 DB 사이에 중간 단계가 있는 것이다.

여기에는 큰 이점이 있다. 다음 시간에 알아보자!

 

728x90
반응형
LIST

'자바 Java > Spring' 카테고리의 다른 글

[JPA]플러시  (0) 2023.02.15
[JPA] 영속성 컨텍스트의 이점  (0) 2023.02.15
JPA 구동 방식  (0) 2023.02.15