Close
Close full mode
logo만렙 개발자 키우기

(3) 양방향 연관관계

Git RepositoryEdit on Github
Last update: a year ago by nowwaterReading time: 2 min

팀에서 회원으로 접근 가능하고, 회원에서 팀으로 접근할 수 있다.

  • 회원과 팀은 다대일 관계

    • 회원 -> 팀 (Member.team)
  • 팀에서 회원은 일대다 관계 -> 일대다 관계는 여러 건과 연관관계를 맺을 수 있으므로 컬렉션을 사용

    • 팀 -> 회원 (Team.members)

데이터베이스 테이블은 외래 키 하나로 양방향 조회 가능 -> 처음부터 양방향 관계

5.3.1 양방향 연관관계 매핑

회원 엔티티

변경사항 없음

@Entity
public class Member {
@Id
@Column(name = "MEMBER_ID")
private String id;
private String username;
@ManyToOne
@JoinColumn(name = "TEAM_ID")
private Team team;
//연관관계 설정
public void setTeam(Team team) {
this.team = team;
}
//Getter, Setter
}

매핑이 추가된 팀 엔티티

@Entity
public class Team {
@Id
@Column(name = "TEAM_ID")
private String id;
private String name;
//추가
@OneToMany(mappedBy = "team")
private List<Member> members = new ArrayList<Member>();
// Getter, Setter ...
}

mappedBy

  • 양방향 매핑 시 사용한다.
  • 반대쪽 매핑의 필드 이름을 값으로 준다.

    반대쪽 매핑이 Member.team 이므로 team을 값으로 준다.

  • 자세한 내용은 5.4 연관관계의 주인 에서 상세히 설명

5.3.2 일대다 컬렉션 조회

public void biDirection() {
Team team = em.find(Team.class, "team1");
List<Member> members = team.getMembers(); // 팀 -> 회원, 객체그래프 탐색
for (Member member : members) {
System.out.println("member.username = " +
member.getUsername());
}
}
//결과
//member.username = 회원1
//member.username = 회원2
}
🚀 JPA — Previous
(2) 연관관계 사용
Next — 🚀 JPA
(4) 연관관계 주인