양방향 연관관계

타마타마·2022년 7월 21일
0

JPA

목록 보기
2/10

결론부터 말하자면

설계시에는 단방향 매핑으로 !!

============================
Member >> N
Team >> 1
Member -> Team으로 접근
-> 단방향 1개
Team -> Member로 접근
-> 단방향 1개
(( 총 2개의 방향 ))

  1. DB인 경우
    • 외래키를 사용하여 접근이 가능하다.
  2. 객체인 경우
    • 관계가 있는 객체끼리 서로 참조할 수 있는 무언가? 가 필요하다 !

Member 혹은 Team 중 하나로 테이블의 외래키를 관리해야하는데..

둘 중 누가 관리해?

N:1 중 N이 무조건 연관관계의 주인

  • 연관관계의 주인(Owner)
    -> 연관관계의 주인만이 외래키를 등록(등록 및 수정)
    -> 주인이 아닌 쪽은 읽기만 가능
    -> 주인은 MappedBy속성 X

Member.java

@ManyToOne
@JoinColumn(name="TEAM_ID")
private Team team;

Team.java

@OneToMany(mappedBy= "team")
private List<Member> members = new ArrayList<Member>();

두개를 매핑만 시켜주는 것 말고,, 실제로 접근을 해야하겠지 ?

필자는 보통 주인 쪽에 양방향 매핑을 할 메서드를 작성해준다.
Member.java

 public void changeTeam(Team team) {
        this.team = team;
        team.getMembers().add(this);
}

해당 방법으로만 하면 양방향 접근이 끝난다.

하지만 설계시에는 무조건 단방향으로 설계 한 후 ! 필요할 경우에 양방향으로 변경하자.

1:N > 양방향 연관관계로 매핑
M:N > 최대한 사용 금지 !! - ManyToOne, OneToMany로 변경

0개의 댓글