TIL_10012021

오늘 한 것

  • 데브코스 W8D5 강의 수강

    • Lombok, JUnit5
  • JPA 미션3 과제

    • 영속성 전이(cascade) 관련
    • cascade 범위를 어떻게 잡을지?
    • 완전 개인 소유인 경우에 사용할 수 있다.
    • DDD의 Aggregate Root와 어울린다. -> DDD 공부해야할듯,,,
    • 애매하면 사용하지 않는다.
    • https://www.inflearn.com/questions/31969
    • 양방향 연관관계
    • entityManager.remove(엔티티) 시 엔티티는 null값이지만, 1차 캐시에 남아있다.flush()를 하게 될 때 스냅샷과 비교해서 DB에 반영하게 되는 것 같다.(DELETE 쿼리 날아감)

      @DisplayName("삭제 테스트")
      @Test
      void testDelete() {
      EntityManager entityManager = emf.createEntityManager();
      EntityTransaction transaction = entityManager.getTransaction();
      
      transaction.begin();
      Member member = new Member("Myunghwan", "Sam", 29, "경기 남양주", "");
      
      String uuid = UUID.randomUUID().toString();
      Order order = new Order(uuid, LocalDateTime.now(), OrderStatus.OPENED, "", member);
      entityManager.persist(order);
      transaction.commit();
      
      Order orderasdf = entityManager.find(Order.class, uuid);
      
      // DB에 남아있음. 영속성 컨텍스트에서 제거할 줄 알았지만 영속성 컨텍스트에서는 남아있고 entity 값만 제거
      entityManager.remove(order); 
      // true -> 영속성 컨텍스트에 남아있는 것을 확인
      log.info("{}", emf.getPersistenceUnitUtil().isLoaded(order)); 
      
      Order searched = entityManager.find(Order.class, uuid); // -> null
      log.info("2 : {}", searched);
      
      transaction.begin();
      transaction.commit();
      
      Order foundOrder = entityManager.find(Order.class, uuid);
      Member foundMember = entityManager.find(Member.class, 1L);
      log.info("{}", foundOrder);
      log.info("{}", foundMember);
      }

Written by@Myunghwan
Nothing changes if nothing changes

GitHub