영속성 전이 : Cascade 2/ 패스트캠퍼스 챌린지 20일차

망고쥬스·2021년 11월 20일
0

Book

@ManyToOne(cascade = CascadeType.PERSIST) 
 //다대일 관계, Book 객체가 Persist 될 때에 Publisher도 Persist 적용
@ToString.Exclude
private Publisher publisher;

BookRepositoryTest

Book book1 = bookRepository.findById(1L).get();
book1.getPublisher().setName("슬로우캠퍼스");

bookRepository.save(book1);

System.out.println("publishers: "+publisherRepository.findAll());

result

슬로우캠퍼스가 적용되지 않았다!

because, 이미 Persist 액션을 취했고, name을 변경하기 때문에 merge에 대한 이벤트 발생
update 즉 merge에 대한 event발생, 하지만 cascade에서 persist설정을 했기 때문에
merge에 대해서 영속성 전이가 일어나지 않은것.
즉 해당 데이터를 넣고 싶으면 별도의 처리가 필요하다.

merge에 대해서도 cascade를 하기 위해 추가 해 보겠다.

Book

@ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE}) //배열타입
//PERSIST와 MERGE에 대해서 영속성 전이를 일으키겠다! 라고 선언해줌

 //다대일 관계, Book 객체가 Persist 될 때에 Publisher도 Persist 적용
@ToString.Exclude
private Publisher publisher;

result

슬로우캠퍼스가 적용되었다!

그 외 Cascade 옵션에 대해 짧게 정리하자면

  • Cascade의 default는 빈 배열 {} 이다. 즉 아무것도 하지 않는다.
  • DETACH 옵션은 영속성을 분리한다.
  • REFRESH 옵션은 리로딩을 했을 떄 연관관계에 있는 Entity도 함께 리로딩 된다.
  • ALL 옵션은 모든 옵션을 포함, 모든 경우에 영속성을 전파한다. 잘 모르면 all옵션 사용하기도 함

#패스트캠퍼스 #패캠챌린지 #직장인인강 #직장인자기계발 #패스트캠퍼스후기 #한번에끝내는Java/Spring웹개발마스터초격차패키지Online

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.

https://bit.ly/3FVdhDa

profile
#newbieDeveloper #since 2021.04.06

0개의 댓글