JPA 영속성 컨텍스트

정훈·2022년 7월 11일
0

jpa

목록 보기
2/2

영속성 컨텍스트

영속성 컨텍스트란 "영구 저장 환경"

  • 엔티티매니저를 통해 persist할경우 실제 db에 저장되는것이아니라, 영속성 컨텍스트를통해서 영속화함 .
    => em.persist() 할때 영속성컨텍스트 저장 그 이후 => db에 저장
  • 엔티티매니저를 통해서 영속성 컨텍스트에 접근함.

장점

  • 영속성컨텍스트에는 1차캐시가 존재함

    영속상태 em.persist 할 시 영속성컨텍스트에 저장
    식별자 값은 데이터베이스 기본키와 매핑 함

  • 동일성보장

    영속 엔티티의 동일성을 보장
    1차 캐시 를 함으로써 기존에 1차캐싱에 저장한 ex)..memeber user ? 등 조회했을때 같은 인스턴스 가됨

  • 트랜잭션을 지원하는 쓰기 지연

em.flush()
em.flush() 안할경우에
em.persist(user)등 하고 난후에 print를 찍어볼경우 값이 안들어가있는걸 확인할수있다.

  • 변경 감지

    더이상 엔티티가 영속성 컨텍스트에서 관리하지않을때
    em.detach(user)
    transaction.commit()이 일어나도 데이터베이스에 저장이 되지 않는다.

엔티티 매니저팩토리, 엔티티 매니저

  • 엔티티매니저는 DB커넥션 풀을 사용하여 DB에 붙는다
  • 매니저팩토리에서 => 엔티티매니저를 생성함 매 요청시

엔티티 생명주기

비영속 상태 (맨처음)

User user = new User() // 비영속상태 

영속 상태

  • 영속성 컨텍스트에 저장이 된 상태 , 컨텍스트에 관리
    -DB에 저장이안되고 트랜잭션의 커밋 시점에 => 정보가 DB에 쿼리로 날라감
em.persist(user) //영속상태 

준영속 상태

  • 컨텍스트안에있다가 분리된상태
em.detach(user)

삭제

  • 삭제된상태
em.remove(user)

Reference::
https://ultrakain.gitbooks.io/jpa/content/chapter3/chapter3.4.html

0개의 댓글