@Test
    void bookCascadeTest() {
        // 영속성 전이 테스트
        // 책 생성 후 저장
        Book book = new Book();
        book.setName("JPA 초격차 패키지");
        bookRepository.save(book);
        // 출판사 생성
        Publisher publisher =new Publisher();
        publisher.setName("우리집");
        publisherRepository.save(publisher);
        // 책의 출판사를 set
        book.setPublisher(publisher);
        bookRepository.save(book);
        // 출판사의 책을 set
        // callByValue callByRef
        // publisher는 List이기 때문에 하나의 책(객체)를 불러와서 book으로 넣는다.
        // publisher.getBooks().add(book);
        publisher.addBook(book); // 위에 코드 보다 조금더 가독성있다.
        // 하지만 setter를 사용하여 직관적으로 표현하는게 더 좋다.
        // 이런경우에는 Publisher클래스에 addBook()함수를 하나 만드는 것도 좋은 방법이다.
        publisherRepository.save(publisher);
        System.out.println("book : " + bookRepository.findAll());
        System.out.println("publishers : " + publisherRepository.findAll());
    }
could not initialize proxy - no Session
    @OneToMany  // 1 : N \ Book : Review
@JoinColumn(name = "book_id")   //중간 테이블 방지
@ToString.Exclude // 릴레이션은 단방향으로 걸고 ToString은 제외해야한다.
private List<Review> reviews = new ArrayList<>();publisherRepository.save(publisher);
bookRepository.save(book);
 @Test
    void bookCascadeTest() {
        Book book = new Book();
        book.setName("JPA 초격차 학습");
        Publisher publisher =new Publisher();
        publisher.setName("우리집");
        book.setPublisher(publisher);
        bookRepository.save(book);
		// publisher.addBook(book); Cascade(영속성전이)할 것 이기 때문에 따로 publisher에 set 하지 않아도 된다.
        
        System.out.println("book : " + bookRepository.findAll());
        System.out.println("publishers : " + publisherRepository.findAll());
    }
object references an unsaved transient instance - save the transient instance before flushing : com.practice.jpa.bookmanager.domain.Book.publisher -> com.practice.jpa.bookmanager.domain.Publisher
    @ManyToOne(cascade = CascadeType.PERSIST)
    @ToString.Exclude
    private Publisher publisher;
Hibernate: 
    insert 
    into
        publisher
        (created_at, updated_at, name) 
    values
        (?, ?, ?)
Hibernate: 
    insert 
    into
        book
        (created_at, updated_at, author_id, category, name, publisher_id) 
    values
        (?, ?, ?, ?, ?, ?)
        Book book1 = bookRepository.findById(1L).get(); 
        book1.getPublisher().setName("바뀐집");
        bookRepository.save(book1);
        System.out.println("publishers : "+publisherRepository.findAll());
    @ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE} ) 
    @ToString.Exclude
    private Publisher publisher;