5.3 양방향 연관관계
팀에서 회원으로 접근하는 관계.
회원에서 팀으로 접근 가능하고, 팀에서 회원 접근 가능한 양방향.
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 ...
}
일대다 관계는 컬렉션인 List<Member> members를 추가
mappedBy 속성은 양방향 매핑일 때 사용한다.
반대쪽 매핑의 필드 이름을 값으로 주면 된다.
반대쪽 매핑이Member.team
이므로team
을 값으로 준다.
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
}