몬그로이

주의가 필요한 일대다 단방향 본문

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)