김영한님이 지음, [자바 ORM 표준 JPA 프로그래밍] 책을 읽고 정리한 필기입니다.📢

양방향 연관관계

img-name
양방향 연관관계

  • 객체 연관관계 : 일대다 관계를 구현하기 위해 컬렉션 사용
  • 테이블 연관관계 : 외래 키 하나만으로 양방향 조회 가능, 추가할 내용 없음

양방향 연관관계 매핑

회원 엔티티

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
@Entity
public class Member {
    @Id
    @Column(name = "MEMBER_ID")
    private String id;

    @Column(name = "NAME", nullable = false, length = 10)
    private String username;

    @ManyToOne
    @JoinColumn(name = "TEAM_ID")
    private Team team;
  
    //연관관계 설정
    public void setTeam(Team team){
        this.team = team;
    }
    //Getter, Setter...
    public void setTeam(Team team) {
        this.team = team;
        team.getMembers().add(this); //Member가 이 연관관계의 주인이기 때문에 여기서 team 내부 memberlist에 회원을 넣어줘야 함
    }
}

팀 엔티티

1
2
3
4
5
6
7
8
9
10
11
12
13
14
@Entity
public class Team {
    @Id
    @Column(name = "TEAM_ID")
    private String id;

    private String name;

    //==추가==//
    @OneToMany(mappedBy = "team")
    private List<Member> members = new ArrayList<>();
    
    //Getter, Setter ...
}

mappedBy 속성은 양방향 매핑일 때 사용하는데 반대쪽 매핑의 필드 이름을 값으로 주면 된다.

일대다 컬렉션 조회

1
2
3
4
5
6
7
8
9
10
11
public static void biDirection(EntityManager em){
    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 카테고리 내 다른 글 보러가기

댓글남기기