ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JPA] 영속성 컨텍스트
    프로그래밍/JPA 2021. 10. 14. 23:39
    반응형

    이 글은 혼자 학습한 내용을 바탕으로 작성되었습니다.

    틀리거나 잘못된 정보가 있을 수 있습니다.

    댓글로 알려주시면 수정하도록 하겠습니다.


    1. 영속성 컨텍스트

    영속성 컨텍스트란

    번역하면 엔티티를 영구 저장하는 환경이라는 뜻으로 해석되며 영속성 컨텍스트는 엔티티 매니저를 생성할 때 하나 생성됩니다.

     

    이렇게 만들어진 영속성 컨텍스트 엔티티 매니저를 통해 접근할 수 있고 관리할 수 있습니다.

     

    엔티티 매니저로 엔티티를 저장하거나 조회하면 엔티티 매니저는 영속성 컨텍스트에 엔티티를 보관하고 관리한다.

     

    엔티티 매니저는 find, persist, merge 메서드를 호출하여 엔티티를 영속성 컨텍스트에 저장합니다.

     

    특징

    영속성 컨텍스트는 엔티티의 식별자의 값으로 엔티티들을 구분합니다.

     

    그러므로 영속 상태의 엔티티는 식별자 값이 반드시 있어야 됩니다.

     

    영속성 컨텍스트는 엔티티를 DB에 저장은 트랜잭션을 커밋하는 순간 저장, 수정, 삭제 등 변경된 내용을 DB에 반영합니다.

     

    2. 엔티티 Life Cycle

    엔티티에는 4가지 상태가 존재합니다.

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

    엔티티 생명주기

    2-1. 비영속

    비영속 상태는 엔티티 객체를 생성만 한 상태를 말하며 아직 영속성 컨텍스트나 DB와는 관련이 없는 순수한 객체를 말합니다.

     

    Member member = new Member();
    member.setName("member1");

     

     

    2-2. 영속

    영속 상태는 영속성 컨텍스트가 관리하는 엔티티를 영속 상태라고 합니다.

     

    즉 비영속 상태 또는 준영속 상태의 엔티티를 persist 또는 merge 메서드를 통해 엔티티를 영속 상태로 만든 경우 영속 상태라고 합니다.

     

    Member member = new Member();
    member.setName("member1");
    //지금은 member는 비영속 상태
    
    em.persist(member);
    //지금은 member는 영속 상태

     

     

    2-3. 준영속

    준영속 상태는 영속성 컨텍스트가 관리하던 영속 상태의 엔티티를 영속성 컨텍스트가 관리하지 않으면 준영속 상태가 됩니다.

     

    즉 영속 상태의 특정 엔티티를 detach 메서드를 통해 준영속 상태로 만든 경우, clear 메서드를 통해 영속성 컨텍스트를 초기화한 경우, close 메서드를 통해 영속성 컨텍스트를 닫은 경우처럼 영속성 컨텍스트의 관리를 받던 엔티티가 관리를 받지 않는 엔티티가 된 경우를 준영속 상태라고 합니다.

     

    Member member = new Member();
    member.setName("member1");
    //지금은 member는 비영속 상태
    
    em.persist(member);
    //지금은 member는 영속 상태
    
    em.detach(member);
    //지금은 member는 준영속 상태

     

     

    2-4. 삭제

    엔티티를 영속성 컨텍스트와 데이터베이스에서 삭제한 상태가 됩니다.

     

    Member member = new Member();
    member.setName("member1");
    //지금은 member는 비영속 상태
    
    em.persist(member);
    //지금은 member는 영속 상태
    
    em.remove(member);
    //지금은 member는 삭제 상태

     

    반응형

    댓글

Designed by Tistory.