JPA에서는 데이터베이스 테이블간의 관계를 나타낼 때 한쪽이 다른쪽만 참조하는 단방향 관계와, 양쪽 다 서로 참조하는 양방향 관계가 있습니다. 우리는 이제까지 BookLog 에서 Book을 참조하는 단방향 관계(Book <= BookLog)로 개발을 진행해 왔었습니다.
하지만 책 정보 조회시 책 기록 조회를 함께 하게 되면서 서로 참조할 필요성이 생겼습니다 (Book <=> BookLog). 기존에 BookLog에서 책 기록을 입력할 때 Book을 참고했었던 단방향 관계에서, 책 정보를 조회할 때 책 기록도 함께 조회하는 양방향 관계가 된 겁니다.
RDBMS에서는 무조건 참조하는 쪽에서만 참조가 될 부모행의 ID를 가지고 있었기 때문에 아무런 문제가 없었습니다만, JPA는 ORM이기 때문에 각자 객체에 상대방의 정보를 가지고 있어야 합니다. 기존의 BookLog 객체는 이미 Book 정보를 가지고 있기 때문에 이번에는 Book 객체에 BookLog 객체를 추가해 보겠습니다.
책 정보를 가지고 있는 테이블에 해당하는 엔티티 Book에 BookLog 멤버변수를 추가합니다.
src/main/java > com.yse.dev.book.entity > Book.java
Copy@OneToMany(mappedBy="book", fetch=FetchType.LAZY)
@Builder.Default
private List<BookLog> bookLogList = new ArrayList();