@ManyToMany는 다대다 관계를 나타낼때 사용한다
@JoinTable : 연결테이블 지정
name : 연결테이블의 이름
joinColumns : 현제 엔티티의 외래키
inverseJoinColumns : 대상 엔티티의 외래키
N:M 관계에서는 JOIN을 해서 새로운 테이블이 만들어지는데 이 테이블이 특별한 의미를 갖는경우가 많고 연결 테이블 에 추가적인 필드가 필요한경울
OneToMany 2개의 엔티티와 두 외래키를 갖는 중간 엔티티를 만들어 구현하는게 좋다
해당 프로젝트에서는 단순 조회정도 필요해서 @ManyToMany로 구현했다
@ManyToMany
@JoinTable(
name = "timetable_lecture", // 중간 테이블 이름
joinColumns = @JoinColumn(name = "timetable_id"), // Timetable이 주인
inverseJoinColumns = @JoinColumn(name = "lecture_id") // Lecture 연결
)
private List<Lecture> lectures = new ArrayList<>();
@ManyToMany(mappedBy = "lectures") // Timetable이 주인이므로 mappedBy 사용
private List<Timetable> timetables = new ArrayList<>();
@Transactional
public void deleteTimetableForMember(Long memberId, String timetableName) {
member.removeTimetable(timetable); //orphanRemoval = true DELETE실행 변경감지로 member DB저장
timetableRepository.delete(timetable); // manytomany에서 delete호출시 중간 관계가 자동 삭제됨 변경감지로 member DB저장
}