728x90
반응형
1. 배경
예전에 JPA를 학습할 때, @ManyToMany는 사용하면 안된다고 배웠었다. 이것은 혹시나 나중에 두 엔티티간 매핑 테이블에 컬럼이 추가될 수도 있는데 @ManyToMany를 적용하면 컬럼 추가가 어렵기 때문이라고 배웠다.
https://whitepro.tistory.com/413
그래서 한 번도 써보지 않았는데, 정말 순수하게 mapping만 필요한 경우이고 간단하게만 적용하면 되는 경우라 적용하게 되었다. 위 예시에서처럼 추가 정보가 필요한 경우 두 엔티티 중 하나의 테이블에 컬럼을 추가하면 된다고 생각이 들었다. 그리고 서비스가 크지 않고 향후에도 큰 영향도가 없다고 판단되어 일단 적용해보았다.
절대 권장할만한 방식은 아닌 것 같다. 그래도 일단 기록은 남긴다.
2. 실제 적용 예시
두 엔티티 중 한 쪽
@ManyToMany(mappedBy = "places")
private Set<Event> Events;
반대쪽
@ManyToMany
@JoinTable(name = "place_event",
joinColumns = @JoinColumn(name = "event_id"),
inverseJoinColumns = @JoinColumn(name = "place_id"))
private Set<Place> places;
- 테이블 이름이 @JoinTable에서 정의하는 name값과 일치해야한다.
- 상기 언급한대로 id, event_id, place_id 외에 다른 컬럼을 지정하더라도 null로 기록된다.
- 저장 시에는 양쪽에서 서로의 값을 set으로 저장 처리를 해줘야한다.
//event를 세팅해주는 코드 생략
//place를 세팅해주는 코드 생략
//place에 event 지정 후 저장
place.setEvents(Set.of(place));
placeRepository.save(place);
//event에 place 지정 후 저장
event.setPlaces(Set.of(place));
eventRepository.save(event);
728x90
반응형
'Programming-[Backend] > JPA' 카테고리의 다른 글
[링크] could not initialize proxy - no Session (0) | 2023.05.02 |
---|---|
[TIL] JPA Expressions Date 오늘 날짜 또는 상수 값 넣기 : dateTemplate, SQL function(내장함수) (0) | 2022.05.17 |
[링크] JPA Map 결과 리턴(결과 집합 그루핑) (0) | 2022.02.21 |
[TIL][에러] SQL-Server - hibernate; JPA 적용 Sort, Paging 시 데이터 누락, 중복 문제 (0) | 2021.12.18 |
[Querydsl][작성중] 6. 실무 활용 - 사용자 정의 Repository (0) | 2021.12.09 |