미운 오리 새끼의 우아한 개발자되기

[JPA] 다양한 연관관계 매핑 (2) 일대다 본문

Spring & Spring Boot/Spring

[JPA] 다양한 연관관계 매핑 (2) 일대다

Serina_Heo 2023. 4. 11. 21:27

일대다 관계는 다대일 관계의 반대방향이다.

 

1.1. 일대다 단방향 [1:N]

하나의 팀(1)은 여러 회원(N) 을 참조할 수 있음 -> 일대다

그리고 팀은 회원을 참조하지만, 회원은 팀을 참조하지 않음 -> 단방향

근데 일대다 단방향이 특이한 점이, DB 테이블에서 FK 는 항상! 다 쪽에서 관리를 한다. 근데 이 경우는 단방향이기 때문에 다 쪽인 Member에서는 FK 를 관리할 필드가 없다. 그래서 일 쪽에서 다 쪽의 FK 를 관리해야하는 특이한 모습이 나타난다.

@Entity
public class Team {
	
    @Id @GeneratedValue
    @Column(name = "TEAM_ID")
    private Long id;
    
    private String name;
        
    @OneToMany
    @JoinColumn(name = "TEAM_ID") // MEMBER 테이블의 TEAM_ID (FK)
    private List<Member> members = new ArrayList<Member>();
    
    // Getter, Setter...

}
@Entity
public class Member {
	
    @Id @GeneratedValue
    @Column(name = "MEMBER_ID")
    private String id;
    
    private String username;
    
    // Getter, Setter...

}

일대다 단방향에서 관계를 매핑할 때는 @JoinColumn 을 명시해야 함. 그렇지 않으면 조인테이블 전략을 기본으로 사용한다.

일대다 단방향의 단점

  • 위에서 말한 특이점이 일대다 단방향의 단점이 된다. 다른 테이블에 연관관계가 있기 때문에 연관관계 처리를 위해 UPDATE SQL 이 추가적으로 발생한다. -> 일대다 단방향 보다는 다대일 양방향 매핑을 사용하자

 

1.2. 일대다 양방향 [1:N, N:1]

일대다 양방향은 존재하지 않는다. 다대일 양방향 매핑을 사용하자.

 

Reference : 자바 ORM 표준 JPA 프로그래밍 (김영한 저)