Organizing Docs/Spring Docs
주의가 필요한 일대다 단방향
Mon Groy
2024. 7. 19. 08:00
일대다 단방향일 때
예를 들어
Team 과 Member 이라는 두 테이블이 있고, Team 에서 Member 를 참조하는 상황
<객체>
| Team |
| id |
| List<Member> memberList |
| Member |
| id |
| x |
<테이블>
| TEAM |
| TEAM_ID(PK) |
| X |
| MEMBER |
| MEMBER_ID(PK) |
| TEAM_ID(FK) |
위와 같이 TEAM 테이블에는 참조하는 대상인 MEMBER에 대한 정보가 없다
Team 엔티티 설정
@OneToMany
@JoinColumn //꼭 사용해야함 - 그렇지 않으면 자동으로 중간테이블 생성됨(조인테이블)
List<Member> members = new ArrayList<>();
query에서 team.getMembers().add(member);
를 입력한 경우 추가 query가 나가면서 Member 테이블이 업데이트로 나오기때문에
테이블이 많은 상태에서 운영하기엔 힘들 수 있음
따라서 반대의 경우인 다대일로 설정하고
대신 양방향으로 설정하는 것을 추천
일대다 양방향
JPA 스팩상 공식적으로 존재하진 않는 설정이지만 만들 수는 있음
관리(업데이트, 인서트)를 한 군데에서만 해야함
즉, 한 방향은 읽기전용으로 설정해야함
결론, 다대일 양방향을 사용하자
<객체>
| Team |
| id |
| List<Member> members |
*@OneToMany
@JoinColumn(name = "TEAM_ID")
| Member |
| id |
| Team team |
@ManyToOne
@JoinColumn (name = " TEAM_ID, insertable = false, updatable = false)
<테이블>
| TEAM |
| TEAM_ID(PK) |
| x |
| MEMBER |
| MEMBER_ID(PK) |
| TEAM_ID(FK) |