[JPA] 자바 ORM 표준 JPA 프로그래밍 - 영속성 관리

이민재·2024년 3월 7일
0
  • 영속성 컨텍스트(PersistenceContext) : 엔티티를 영구 저장하는 환경

    • EntityManager.persist(entity) : 사실 DB가 아니라 영속성 컨텍스트에 저장한다는 뜻
    • 엔티티 매니저를 통해서 영속성 컨텍스트에 접근
  • 엔티티 생명주기

    • 비영속 : 컨텍스트와 전혀 관계없는 새로운 상태
    • 영속 : 컨텍스트에 관리되는 상태
    • 준영속 : 저장되었다 분리된 상태
    • 삭제 : 삭제된 상태

//객체를 생성한 상태(비영속)
Member member = new Member();
member.setId("member1");
////

EntityManager em = emf.createEntityManager();
em.getTransation().begin();

//객체를 저장한 상태(영속)   ->  영속성 컨텍스트에 저장되었을 뿐 DB에 저장된게 아님
em.persist(member);
//

//컨텍스트에서 분리
em.detach(member);

//객체를 삭제
em.remove(member);

영속성 컨택스트의 이점

  • 1차 캐시

  • 동일성 보장

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

    • 배치 기능이 가능
  • 변경 감지(더티 체킹)

    • set함수로 값 변경 시 데이터 Update 가능

    • JPA는 commit 시점에 flush가 발생하면서 엔티티와 스냅샷(가져온 시점의 값)을 비교 후 update 쿼리를 쓰기 지연 sql 저장소에 보냄

  • 지연 로딩

플러시

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

  • 기능

    • 변경 감지

    • 수정된 엔티티 쓰기 지연 SQL 저장소 등록

    • 쓰기 지연 SQL 저장소의 쿼리를 데이터베이스에 전송 (등록, 수정, 삭제)

profile
초보 개발자

0개의 댓글