영속성

Sangkyeong Lee·2021년 5월 19일

[인프런]JPA

목록 보기
2/8

인프런 강의 < 자바 ORM 표준 JPA 프로그래밍 - 기본편 > 정리


JPA에서 가장 중요한 2가지

  1. 객체와 관계형 데이터베이스 매핑
  2. 영속성 컨텍스트

영속성 컨텍스트

  • 엔티티를 영구 저장하는 환경이라는 뜻
  • 영속성 컨텍스트는 눈에 보이지 않는 논리적인 개념이며 EntityManager를 통해서 접근한다.
EntityManager.persist(entity)
  • 위의 코드는 entity를 DB에 저장하는 것이 아니라 영속화한다는 뜻
    • 영속화: 영속성 컨텍스트 라는 곳에 저장한다

  • 고객의 요청이 오면 EntityManagetFactoryEntityManager를 생성한다

엔티티의 생명주기

  1. 비영속(new/transient)

    • 영속성 컨텍스트와 관계없는 새로운 상태 (new를 통해 객체 생성)
    // 객체를 생성한 상태(비영속)
    Member member = new Member();
    member.setId("member1");
    member.setUsername("회원1");
  2. 영속(managed)

    • 비영속단계에서 persist를 통해 영속성 컨텍스트에 관리되는 상태
    // 객체를 생성한 상태(비영속)
    Member member = new Member();
    member.setId("member1");
    member.setUsername("회원1");
    
    EntityManager em = emf.createEntityManager();
    em.getTransaction().begin();
    
    //객체를 저장한 상태(영속)
    em.persist(member);
  1. 준영속(detached)

    • 영속성 컨텍스트에 저장되었다가 분리된 상태
    em.detach(member);
  2. 삭제(removed)

    • 삭제된 상태
    em.remove(member);

영속성 컨텍스트의 이점

  1. 1차 캐시
  2. 동일성 보장
  3. 트랜잭션을 지원하는 쓰기 지연(transactional write-behind)


  4. 변경 감지(Dirty Checking)

    • commit이 되면 flush()가 호출이 되고 엔티티와 스냅샷을 비교해서 변경된 엔티티를 찾는다.
  5. 지연로딩(Lazy Loading)

플러시

  • 영속성 컨텍스트의 변경 내용을 데이터베이스에 반영하는 것
    교재 확인

< 자료 출처: 자바 ORM 표준 JPA 프로그래밍 - 기본편 >

profile
💻Backend Developer

0개의 댓글