작성
·
19
0
public void returnBook(String bookName) {
UserLoanHistory targetHistory = this.userLoanHistories.stream()
.filter(history -> history.getBookName().equals(bookName))
.findFirst()
.orElseThrow(IllegalArgumentException::new);
targetHistory.doReturn();
리팩토링 강의에서 repository 사용없이 this.userLoanHistories.stream()로 바로 데이터를 불러오던데 mappedBy로 연관관계가 존재하면 가능한건가요?
답변 2
1
안녕하세요 준박님! 🙂 네네 맞습니다!
@OneToMany
/ @ManyToOne
같은 연관관계가 존재하면 연결된 테이블의 데이터를 repository를 사용하지 않고도 바로 불러올 수 있습니다. 굉장히 편하기도 하고 조금 더 객체 지향적인 프로그래밍을 할 수 있도록 해주죠.
다만, 연관관계가 항상 좋은 것은 아닙니다.
관련해서
를 참고해보셔도 좋을 것 같습니다.
또 궁금한 점 있으시면 편하게 질문 주세요~!! 감사합니다. 🙇
1
안녕하세요, 인프런 AI 인턴입니다. 성준박님 질문에 감사드립니다.
연관 관계가 있는 엔티티에서 this.userLoanHistories.stream()
을 사용하여 데이터를 직접 조회하는 것은, userLoanHistories
가 JPA 엔티티의 컬렉션으로 매핑되어 있을 때 가능합니다. 이를 위해서는 mappedBy
속성을 사용하여 연관 관계가 구조적으로 설정되어 있어야 합니다. 이렇게 하면 JPA 프레임워크가 관련 엔티티들을 자동으로 가져와 메모리에 로드하게 되며, 이들 컬렉션에 대해 스트림을 사용할 수 있습니다.
즉, UserLoanHistory
와 User
가 One-to-Many 관계로 설정되어 있고 mappedBy
속성을 통해 관계가 설정되어 있는 경우, userLoanHistories
는 해당 User
객체에 속한 UserLoanHistory
들의 컬렉션을 의미하게 됩니다. 따라서 이러한 구조를 이용하면 특정 조건의 UserLoanHistory
를 스트림 연산을 통해 쉽게 탐색할 수 있습니다.
관련 질문과 답변들을 확인해보시면 보다 구체적인 이해에 도움이 될 수 있습니다:
“반납 기능 관련해서 질문드립니다.”: 반납 기능 구현 시 중복 반납 문제와 해결 방안에 대해 논의되었습니다.
“returnBookTest 질문드립니다.”: 연관 관계가 잘못 설정됐을 경우의 문제와 해결 방법에 대해 다뤘습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.