시그마 삽질==six 시그마

JPA -Persistence Management 본문

프로그래밍/JPA

JPA -Persistence Management

Ethan Matthew Hunt 2020. 4. 8. 20:59
우아한 형제들의 김영한 팀장님의 '자바 ORM 표준 JPA 프로그래밍'을

구입하시길 강력 추천드립니다.

책 구입을 원하시는분은 요기를 클릭하시면 됩니다.

저자 직강 인프런 강의도 있습니다 궁금하신분은 요기를 클릭

하단의 내용은 제가 예전에 읽었던 내용을 요약 정리한 것입니다.

 

-엔티티 매니져는 DB 연결이 트랜잭션 시작시 커넥션 획득


-영속성 컨텍스트(persistence context): 엔티티를 영구 저장하는 환경

 

-엔티티 생명주기

 

1. 비영속 :  pc와 관계 x

2. 영속 : pc에 저장되어 pc가 관리하는 상태 (em.persist(), em.find(), JPQL 조회)

3. 준영속: pc저장됬다 분리(식별자 보유, 지연로딩 불가)

4. 삭제: pc에서 삭제

 

-영속성 컨텍스트 특징

 

1. 식별자값이 반드시 있다.

2. tx 커밋시에야 DB에 flush하여 저장(flush는 pc의 변경내용을 DB에 반영하는 작업임)

3. pc가 entity관리시 장점

    1) 1차 캐시:

      pc내부에 캐시를 1차캐시라함.

      Map으로 관리(key는 식별자,값은 엔티티 인스턴스).

      find호출시 1차캐시에 없으면 DB조회->엔티티생성 ->1차캐시 저장->영속상태 Entity 반환

    2) 동일성 보장:  두 find 사이에 변경된게 없다면 1차 캐시 동일 Entity 반환하여 동일성 보장

    3) 쓰기 지연: tx 커밋직전까지 쓰기지연 SQL 저장소에 모아둔 CUD 쿼리를 커밋시에 DB에 보내는데 이걸 쓰기 지연이라함

    4) 변경 감지:

     pc에 저장된 기존 스냅샷과 현재 Entity비교, Entity 변경사항 DB에 자동반영

      pc가 관리하는 영속상태의 Entity만 해당

      모든 필드 update(but, @org.hibernate.annotation.DynamicUpdate 사용시 동적으로 update 가능)

    5)지연 로딩

 

-플러시

 

1. Flush: pc의 변경내용을 DB에 반영하는 작업

2.Flush 하는 방법3가지

    1) em.flush() 호출

    2) tx commit 시 자동호출

    3) JPQL 쿼리 실행시 default flush 됨(if 자동호출 안된다면, em.persist(멤버A) 후 바로 JPQL로 멤버모두조회위해 find 사용시  멤버A는 조회결과에없음)

    JPA default가 FlushModeType.AUTO다(커밋이나 쿼리를 실행할때 플러시(기본값)

 

 

PC에 저장(persist,find,jpql)-->DB에 저장(flush,commit,jpql)

 

'프로그래밍 > JPA' 카테고리의 다른 글

JPA -다양한 연관관계 매핑  (0) 2020.04.09
JPA -연관관계 매핑  (1) 2020.04.08
JPA -Entity Mapping  (0) 2020.04.08
JPA-Flow  (0) 2020.04.08
JPA -Introduction  (0) 2020.03.30
Comments