(3) 양방향 연관관계
Last update: a year ago by nowwaterReading time: 2 min
팀에서 회원으로 접근 가능하고, 회원에서 팀으로 접근할 수 있다.
회원과 팀은 다대일 관계
- 회원 -> 팀 (Member.team)
팀에서 회원은 일대다 관계 -> 일대다 관계는 여러 건과 연관관계를 맺을 수 있으므로 컬렉션을 사용
- 팀 -> 회원 (Team.members)
데이터베이스 테이블은 외래 키 하나로 양방향 조회 가능 -> 처음부터 양방향 관계
5.3.1 양방향 연관관계 매핑
회원 엔티티
변경사항 없음
@Entitypublic 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}
매핑이 추가된 팀 엔티티
@Entitypublic 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}