본문 바로가기
[SpringBoot]

ManyToMany 관계에 데이터 추가(INSERT) 하기

by Hevton 2023. 4. 10.
반응형

 

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로 동일한 효과를 낼 수 있다.

반응형