jpa

su dong·2023년 8월 11일
1

JPA

가장 중요한 2가지

매핑하는 것(정적 관점)

영속성 컨텍스트(내부구조와 동작 방식)

jpa의 모든 데이터 변경이나, 로직들은 transaction안에서 실행되어야 한다.

하이버네이트 entitymanager의존성을 가져오면, jpa interface도 들어있다.

영속성 컨텍스트

엔티티를 영구 저장하는 환경
EntityManager를 생성하면 그 안에 영속성 컨텍스트가 있다.

영속성 컨텍스트의 이점

  1. 캐싱 해준다. (1차 캐시를 먼저 뒤지고) 없으면 db에서 뒤진다.
  2. 영속성 엔티티의 동일성 보장해준다.
  3. 트렌젝션을 지원하는 쓰기 지원
    쓰기 지연 SQL저장소에 저장해놓았다가 -> em.commit()시에 한꺼번에 실행한다.
<property name="hibernate.jdbc.batch_size" value="10"/>

를 persistence.xml에 추가하면 배치사이즈를 조절할 수 있다.

  1. 변경감지 가능
    commit시 내부적으로 flush()라는 것이 호출됨
    -> 1차 캐시에서 엔티티와 스냅샷을 비교함
    -> 바뀌었으면 update query를 쓰기 지연 sql 저장소에 만들어둠
    -> 데이터베이스에 반영

플러시

쌓아뒀던 sql을 데이터베이스에 넘김
영속성 컨텍스트의 변경사항과 데이터베이스를 맞추는 사항

flush()를 실행하면 생기는 일

변경감지 발생
수정된 엔티티를 쓰기 지연 SQL 저장소에 등록
쓰기지연 SQL저장소의 쿼리를 데이터베이스에 넘김(등록, 수정, 삭제 쿼리)

flush 실행 방법

  1. em.flush()
  2. tx.commit()
  3. JPQL쿼리 실행 : JPQL로 조회할 때는 바로 실행됨. 조회하려는데 위에 sql문이 쓰기지연으로 저장되어 있으면 안되기 때문임.

준영속 상태

profile
사람들을 돕는 문제 해결사, 개발자 sudong입니다. 반갑습니다. tkddlsqkr21@gmail.com

0개의 댓글