Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Archives
Today
Total
관리 메뉴

개발자되기 프로젝트

영속성 컨텍스트 본문

인프런/[인프런] 자바ORM 표준 JPA 프로그래밍

영속성 컨텍스트

Seung__ 2021. 8. 8. 21:29

1. JPA에서 가~~장 중요한 두 가지


  • 객체와 관계형 데이터베이스 매핑
    (Object Relational Mapping)
  • 💥영속성 컨텍스트

 

2. EntityManagerFactory와 EntityManager


 

Hello JPA

1. JPA 구동방식 Persistence에서 설정정보 조회 EntityManagerFactory 생성 - EntityManagerFactory는 애플리케이션 로딩 시 딲! 하나 만 만들어 놔야함. - EntityManagerFactory 생성위해서는 PersistenceUnitN..

bsh-developer.tistory.com

 

3. Persistence Context(영속성 컨텍스트)


  • JPA를 이해하는데 가장 중요한 용어
  • "엔티티를 영구 저장하는 환경"이라는 뜻
  • EntityManager.persist(entity) : 영속성 컨텍스트를 통해서 엔티티를 영속화
    - 즉 엔티티를 영속성 컨텍스트에 저장.
  • 논리적인 개념
  • 눈에 보이지 않음
  • EntityManager를 통해 Persistence Context에 접근
  • 영속성 컨텍스트와 Transaction의 주기를 맞춰 설계해야 함.
  • Transaction이 시작하고 끝나면 영속성 컨텍스트도 동일하게 시작하고 끝나야함.

 

4. Entity의 생명주기


  • 비영속(new/transient)
    - 영속성 컨텍스트와 전~혀 관계가 없는 새로운 상태. new()로 만든 엔티티
  • 영속(managed)
    - 영속성 컨텍스트에 관리되는 상태
  • 준영속(detatched)
    - 영속 컨텍스트에 저장되어있다가 분리된 상태
  • 삭제(removed)
    - 삭제된 상태

 

5. 비영속


  • 객체를 생성 만 한 상태
  • 영속성 컨텍스트에 아무것도 안함.
  • JPA랑 전~혀 관계 없는 상태

 

 

6. 영속


  • 객체를 생성하고 em.persist(entity)한 상태.
//비 영속상태, 객체 생성한 상태
Member member = new Member();
member.setId(100L);
member.setName("BBB");

//영속상태
em.persist(member);
  • persist, 영속화 한다고 해서 DB에 바로 쿼리가 날라가는 것 이 아님.
  • 쿼리가 날라가는 시점은 trnsaction.commit 시점
  • 영속 상태는 1차 캐시에 올라가 있는 상태, persist(entity)로 1캐시에 들어간 상태.
  • 또는 find 조회 시 1차 캐시에 없어서 DB에서 조회후 1차 캐시에 저장한 상태. 

 

7. 준영속, 삭제


  • 준영속(detatched) : 영속성 컨텍스트에서 분리. 영속성 컨텍스트에서 관리 안함.
    - 동일 transaction 내에서 새로 만든 객체(비영속)에 영속상태 객체의 PK, 및 data를 넣으면
      준영속 상태임.
em.detatch(entity)
  • 삭제 : 객체를 삭제한 상태
em.remove(entity)

 

 

8. 영속성 컨텍스트의 이점


  • 1차 캐시
  • 동일성(identity) 보장
  • Trnasaction을 지원하는 쓰기 지연
  • 변경감지(dirty checking)
  • 지연 로딩(lazy loading)

'인프런 > [인프런] 자바ORM 표준 JPA 프로그래밍' 카테고리의 다른 글

플러시, 준영속 상태, 정리  (0) 2021.08.08
영속성 컨텍스트 2  (0) 2021.08.08
Hello JPA  (0) 2021.08.08
JPA 시작, 프로젝트 세팅  (0) 2021.08.07
JPA?  (0) 2021.08.07
Comments