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 프로그래밍 (김영한 저)