JPA (2)

최혜환·2024년 4월 4일
0

JPA

목록 보기
5/5

JPA 의 기본 개념들에 대해 더 공부한 것을 작성하고자 한다.


준영속 상태

  • 준영속 상태는 영속성 컨텍스에서 해제된 상태
  • 영속성 컨텍스트가 지원하는 어떤 기능도 동작하지 않는다.
  • 영속 상태였었기 때문에 식별자 값을 가지고 있다.

영속 상태

  • 영속성 컨텍스트에서 관리하는 상태
  • 영속성 컨텍스트가 지원하는 기능에 동작한다.

영속성 컨텍스트

  • 엔티티 클래스에서 만들어진 엔티티를 영구 저장하고 관리하는 환경
  • 엔티티 클래스는 @Entity 가 있는 클래스이며 이 클래스에서 엔티티가 생성된다.
  • 영속성 컨텍스트는 엔티티를 식별자 값으로 구분한다.
  • 영속 상태 또는 준영속 상태는 식별자 값을 가지고 있다.

1차 캐시

  • 영속성 컨텍스트 내부에 엔티티를 보관하는 저장소
  • 엔티티 매니저가 엔티티를 조회할 때 1차 캐시를 조회한 후 없으면 DB 조회를 한다.
    • 네트워크를 통해 DB를 조회하는 시간 비용이 비싸기 때문에 캐시를 이용하는 것은 효율적이다.
  • 1차 캐시는 트랜잭션 시작부터 종료까지만 유효하다. (트랜잭션이 종료되면 영속성 컨텍스트도 종료되어 1차 캐시도 지워진다)

flush

  • 영속성 컨텍스트의 변경 내용을 DB에 저장

detach

  • 준영속 상태로 변경하며, 영속성 컨텍스트로부터 분리된 상태이다.

persist

  • 영속성 컨텍스트에 저장한다. (영속 상태)

clear

  • 영속성 컨텍스트 초기화

close

  • 영속성 컨텍스트 종료

remove

  • DB 에서 해당 row 를 삭제

merge

  • 준영속 상태 엔티티를 이용해서 새로운 영속 상태의 엔티티로 반환한다.
    • 파라미터로 넘어온 준영속 상태의 식별자값으로 엔티티 조회 (1차캐시 -> DB)
    • 조회된 영속 엔티티에 준영속 엔티티의 값을 채워 넣어 새로운 영속 상태 엔티티로 반환
  • merge 는 모든 필드를 그대로 변경하기 때문에 기존 값을 잃고 null 값이 들어갈 수 있다.
    • 이를 방지하기 위해 서비스 계층에서 더티 체킹 사용

쓰기 지연 저장소

  • 한 트랜잭션 안에서 이뤄지는 update 나 save 의 쿼리를 쓰기 지연 저장소에 가지고 있다가 트랜잭션이 커밋되는 순간 (flush) 한번에 DB에 날리는 것
  • 쓰기 지연 저장소가 작동하지 않는 경우
    • Identity 옵션을 사용하는 경우는 DB 에 저장이 되어야 id 값을 알 수 있기 때문에..
    • 트랜잭션이 종료되는 시점에 쿼리가 발생하지 않고 순서대로 println 과 함께 실행됨
    • Identity 가 아니라면 insert, update, delete 는 트랜잭션 종료 시점에 쿼리가 한번에 나감

즉시로딩, 지연로딩

0개의 댓글

관련 채용 정보