- 다대일의 반대는 일대다 : ) .
💡 다대일 [N : 1]
- 가장 많이 사용하는 연관관계 이다.
다대일 단방향

- 외래키가 있는 쪽에 참조를 걸어준다고 생각하면 된다.
@Entity
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
public class Member {
@Id
@GeneratedValue
private Long id;
@Column(name = "USERNAME")
private String name;
@ManyToOne
private Team team;
}
@Entity
@Getter @Setter
public class Team {
@Id
@GeneratedValue
private Long id;
private String name;
}
다대일 양방향

- 연관관계가 주인이 아닌 쪽에 필드를 추가해주면 단순 조회는 가능하다.
@Entity
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
public class Member {
@Id
@GeneratedValue
private Long id;
@Column(name = "USERNAME")
private String name;
@ManyToOne
private Team team;
}
@Entity
@Getter @Setter
public class Team {
@Id
@GeneratedValue
private Long id;
private String name;
@OneToMany(mappedBy = "team")
private List<Member> members = new ArrayList<>(); // ArrayList를 넣어두면 null이 뜨지 않는다. -> 관례로 많이 사용
}
💡 일대다 [1 : N]
- 실무에서 거의 사용하지 않으며, 권장하는 연관관계가 아니다.

- 테이블의 일대다 관계에서는 무조건 '다' 쪽에 외래키가 있어야 한다
- 객체에서는 team 이 연관관계 주인이 되는데 team 의 List members 의 변화가 있으면 테이블의 member 의 team_id 에 업데이트가 된다.
- 즉, 객체와 테이블의 차이가 존재해서 반대편 테이블의 외래키를 관리하는 구조를 갖게 된다.


- 실무에서 사용하지 않는 이유
- 반대편 테이블의 외래키를 관리하는 구조를 갖게 되서 헷갈릴 수 있다.
- team entity 에서 변경이 일어나면 member 테이블에 update 되어 운영에 문제가 생길 수 있다.
- 실무에서는 다대일 단방향 + 필요하면 양방향 추가 전략을 사용한다.
- 반대편 테이블의 외래키를 관리하는 구조를 갖게 되서 헷갈릴 수 있다.
<자바 ORM 표준 JPA 프로그래밍 - 기본편 을 참고하여 작성하였습니다.>
'JPA' 카테고리의 다른 글
| [Jpa] 상속관계 매핑 (0) | 2023.05.22 |
|---|---|
| [Jpa] 다대다 [N:N] 에 대해서 (0) | 2023.05.17 |
| [Jpa] 연관관계 매핑 기초 (0) | 2023.05.01 |
| [Jpa] 엔티티 매핑 (0) | 2023.04.30 |
| [Jpa] 영속성 컨텍스트 (0) | 2023.04.27 |