• 영속성 컨텍스트란 무엇인가.
        • 실제 DB 저장하는 것이 아니라 
        • 엔티티를 "영속컨텍스트에" 저장한다는 의미이다.

          • JPA 이해하는데 가장 중요한영어
          • "엔티티를 영구 저장하는 환경"이라는 의미를 가진다.
          • EntityManager.persist(entity)
          • 매니저(EntityManager)를 통해 영속성 컨텍스트(persistence)에 접근한다.
        • 비영속 컨텍스트
          • 영속성 컨텍스트와 전혀 관계가 없는 새로운 상태
          • JPA 관리하지 않는 상태
      //객체를 생성한 상태(비영속)
      
      Admin admin = new Admin();
      
      admin.setId("member1");
      
      admin.setUsername("회원1");
      
      //영속상태
      em.persist()

       

       

      • 준영속 (detached)
        • 영속성 컨텍스트에 저장되었다가 분리된 상태 
          //
          회원 엔티티를 영속성 컨텍스트에서 분리, 준영속 상태
        • em.detach()
      Admin admin = em.find(Admin.class , 101L);
      admin.setName("AAAAAA");
                  
      //JPA에서 관리하지 않는다. 
      em.detach(admin);
      
      //영속성 컨테스트의 내용을 전부 초기화 
      em.clear();

       

      • 그렇다면 영속성 속성을 클리어하고 다시 조회 하게 어떻게 될까 ? 
        • 아래의 예시를 보면 "em.clear" 또는 em.detach를 사용시에는 영속성관리를 하지 않게 됨으로 
        • admin 과 admin1은 1차캐시된 데이터를 가져오지 않으므로  false가 나오게 된다. 

       

                  Admin admin = em.find(Admin.class , 101L);
                  admin.setName("AAAAAA");
      
                  //JPA에서 관리하지 않는다.
                  em.detach(admin);
      
                  em.clear();
      
                  Admin admin1 = em.find(Admin.class,101L);
      
                  System.out.println(admin == admin1);

       

       

      • 영속이란 
        • 실제 영속컨테스트가 관리하는 1차캐시에 데이터가 없으면 DB에서 데이터를 가져와 캐시에 담아 JPA가 관리하는 것 
      • 데이터의 동일성
        • JPA "영속엔티티" 동일성을 보장해준다.
        • 1 캐시로 반복가능한 읽기(RePEATABLE READ) 등급의 트랜잭션 격리 수준을 데이터베이스가 아닌 애플리케이션 차원에서 제공
      • 엔티티 수정 감지
        • JPA 변경감지 기능이 있어서 "엔티티" 변경
        • JPA 자바의 Collection 변경하듯이 "값만 변경했지만update 되었다 .

                  Admin admin = em.find(Admin.class,101L);

                  admin .setName("나승후1111");

       

      + Recent posts