반응형
User 테이블과 Marathon 테이블이 ManyToMany relationship을 갖고 있고
join table은 user_subscription 이라고 보자.
// UserService
@Transactional
fun saveMarathon() {
val user = userRepository.findById(userId).orElseThrow() // 유저 가져옴
val marathon = marathonRepository.findById(marathonId).orElseThrow() // 마라톤 가져옴
user.subscribedMarathons.add(marathon) // 유저가 마라톤 구독
}
이렇게 한 쪽에서만 저장하면 된다. 그러면 user_subscription 조인 테이블에 적용된다.
참고로 @Transactional 이므로 user의 변경사항이 적용되므로 user에서 별도의 save함수를 적용해주지 않아도 된다.
+ 만약 user가 또 다른 필드들에 대해 LAZY 옵션을 가져서 findById로 해당 데이터를 읽어들이지 않는 것도 문제 없다. 전혀 지장 없다.
JPA에서 OneToMany와 ManyToMany 모두 FetchType은 기본적으로 EAGER이다.
Fetch Join 쿼리를 따로 만들어 주지 않아도 @EntityGraph로 동일한 효과를 낼 수 있다.
반응형
'[SpringBoot]' 카테고리의 다른 글
SpringBoot Mysql 프로젝트 EC2에서 Docker로 실행하기 (1) | 2023.04.21 |
---|---|
SpringBoot Mysql프로젝트 Docker로 실행하기 (0) | 2023.04.19 |
유저와 게시글 N : M 에서의 Relation (0) | 2023.04.07 |
Ubuntu에 Docker 설치하기 (0) | 2023.04.07 |
[SpringBoot Kotlin] data class는 언제 사용하는 것이 좋을까? (0) | 2023.03.30 |