개발 기록

[JPA] 영속성 컨텍스트 본문

JAVA/JPA

[JPA] 영속성 컨텍스트

수염차 2022. 3. 29. 11:59

영속성 컨텍스트

-엔티티를 영구 저장하는 환경

 

엔티티의 생명주기

-비영속 (new/transient) : 영속성 컨텍스트와 전혀 관계가 없는 새로운 상태

-영속(managed) : 영속성 컨텍스트에 관리되는 상태

-준영속(detached) : 영속성 컨텍스트에 저장되었다가 분리된 상태

-삭제(removed) : 삭제된 상태

 

 

엔티티 조회, 1차 캐시

em.persist(member);

영속상태가 되고 1차 캐시에 저장됨 ( 영속성 컨텍스트 안에 1차 캐시 존재 )

--> 데이터 조회시 db보다 먼저 1차 캐시에서 데이터를 찾음

--> 1차 캐시에 없으면 db에서 조회후 1차 캐시에도 저장하고 그것을 반환

 

영속 엔티티의 동일성 보장

-1차 캐시로 반복 가능한 읽기 등급의 트랜잭션 격리 수준을 데이터베이스가 아닌 애플리케이션 차원에서 제공

--> ==비교를 보장해줌 (마치 자바 컬렉션에서 반복으로 꺼내면 같은 것 처럼)

 

엔티티 수정 : 변경 감지

//영속 엔티티 조회
Member member = em.find(Member.class , "memberA");
//영속 엔티티 데이터 수정
member.setName("hi");
//update, persist 같은 코드가 없어도 됨
tx.commit();

commit 시점에 영속 컨텍스트에서는 엔티티와 스냅샷을 비교 (스냅샷 : 값을 최초로 읽어온 시점)

엔티티가 변경되면 update sql을 생성해서 쓰기 지연 sql 저장소에 등록 _> db에 쿼리 전송

 

플러시

-영속성 컨텍스트의 변경내용을 데이터베이스에 반영

-transaction commit 시점에 플러시가 발생

-직접 호출 : em.flush( );

- 1차 캐시와는 상관 없음 (영속성 컨테스트를 비우지 않음)

 

 

출처 : 인프런 자바 ORM 표준 JPA 프로그래밍 - 기본편

'JAVA > JPA' 카테고리의 다른 글

JPA를 사용하면 좋은 점  (0) 2022.03.25
Comments