Contents

[자바 ORM 표준 JPA 프로그래밍] 6장 다양한 연관관계 매핑 - 일대다

자바 ORM 표준 JPA 프로그래밍 학습 내용 정리한 포스팅 입니다.

일대다

일대다 관계는 엔티티를 하나 이상 참조할 수 있으므로 자바 컬렉션 (Collection, List, Set, Map ) 중 하나를 사용한다.

일대다 단방향 [1:N]

  • 일대다 단방향 관계는 JPA 2.0 부터 지원한다.
  • 일대다 단방향의 경우 반대편에서 테이블의 외래키를 관리하는 특이한 모습이 나타난다.

Team.java

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
@Entity
public class Team {
    
    @Id @GeneratedValue
    @Column(name = "TEAM_ID")
    private String id;
    
    private String name;
    
    @OneToMany
    @JoinColumn (name = "TEAM_ID") // MEMBER 테이블의 TEAM_ID (FK)
    private List<Member> members = new ArrayList<Member>();

}

Member.java

일대다 단방향 관계를 매핑할때는 @JoinColumn 을 명시.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
@Entity
public class Member {
    
    @Id @GeneratedValue
    @Column(name = "MEMBER_ID")
    private Long id;
    
    private String username;
    
    // Getter, Setter...
}

일대다 단방향 매핑의 단점

  • 매핑한 객체가 관리하는 외래 키가 다른 테이블에 있다는 점.
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
public void testSave() {

    Member member1 = new Member("member1");
    Member member2 = new Member("member2");

    Team team1 = new Tema("team1");
    team1.getMembers().add(member1);
    team2.getMembers().add(member2);

    em.persist(member1);
    em.persist(member2);

    em.persist(team1);
}