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

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

CASCADE 활용하기

Cascade: 작은 폭포 (폭포가 물을 받으면 아래로 흘려 보냄)
영속성도 값을 받으면 아래로 흘려준다 라는 의미를 가짐

JPA에서 Cascde를 확인 해 보겠습니다.

OneToMany
OneToOne
ManyToMany
ManyToOne
처럼 연관관계가 서로 있는 경우에 설정할 수 있다.

설정 옵션들은 6가지가 있다.

  • ALL
  • PERSIST
  • MERGE
  • REMOVE
  • REFRESH
  • DETACH

bookCascadeTest()

@Test
void bookCascadeTest(){
	Book book = new Book();
	book.setName("JPA 초격차패키치");
	
	bookRepository.save(book);

	Publisher publisher = new Publisher();
	publisher.setName("패스트캠퍼스");

	publisherRepository.save(publisher);

	book.setPublisher(publisher);
	bookRepository.save(book);


	publisher.addBook(book); //아래 코드보다 이게 더 가독성이 좋음! (publisher 내에 addBook() 생성)
	//	publisher.getBooks().add(book); //list로 가져오기때문에 get을 사용
    
    // Java에서 제공하는 CallByValue, CallByReference
    // Object는 Reference 즉, 주소값을 활용하여 처리가 되기 때문에
    // getBooks를 해서 어떠한 값을 추가 했을 때 publisher가 가지고 있는 books()에 대한 정보도
    // 같이 바뀌게 된다. 같은 레퍼런스이기 때문에.
    // 하지만 최근 가독성 있는 코드가 트렌드 이기 때문에 book에 setPublisher처럼 setter를 사용하는 것이
    // getter를 사용하는 것 보다 더욱 직관적이라고 할 수 있다.
    // 이런 경우에는 publisher에 들어가서
    // addBook() 이란 별도의 메서드를 사용해서 사용하는게 바람직하다고 할 수 있다.
    
    // 예
    
    // public void addBook(Book book){
    // this.books.add(book);
    // }
    
    
    
	publisherRepository.save(publisher);

	System.out.println("books : "+bookRepository.findAll());
	System.out.println("publisher : " +publisherRepository.findAll());

}

result
에러발생

-> H2DB를 사용한다면 에러가 나지 않지만 현재는 mySQL DB를 기반으로 실행하기 때문에 DB를 실행시켜줘야 에러가 발생하지 않는다.
-> 서버를 돌리도록 하자


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

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

https://bit.ly/3FVdhDa

profile
#newbieDeveloper #since 2021.04.06

0개의 댓글