[자바 ORM 표준 JPA 프로그래밍 - 기본편] 6-4강
https://inf.run/2zDo 강의를 수강하고 작성하는 게시물입니다.
1. 다대다 [N:M]
객체는 컬렉션을 사용해서 객체 2개로 다대다 관계가 가능하다. 하지만 관계형 데이터베이스는 정규화된 테이블 2개로 다대다 관계를 표현할 수 없다. 그래서 연결 테이블을 추가해서 일대다, 다대일 관계로 풀어내야한다.
@ManyToMany를 사용한다.
@JoinTable로 연결 테이블 지정한다.
다대다 매핑은 단방향 혹은 양방향 모두 가능하다.
예시를 들어보자
단방향
// Member.java
@ManyToMany
@JoinTable(name = "MEMBER_PRODUCT")
private List<Product> products = new ArrayList<>();
//Product.java
@Entity
public class Product{
@Id @GeneratedValue
private long id;
private String name;
}
양방향
//Product.java
@Entity
public class Product{
@Id @GeneratedValue
private long id;
private String name;
@ManyToMany(mappedBy = "products")
private List<Member> members = new ArrayList<>();
}
실무에서는…?
편리해 보이지만 실무에서 사용하지 않는다.
연결 테이블이 단순히 연결만 하고 끝나지 않는다. 주문시간, 수량같은 여러 데이터가 들어올 수 있다.
다대다 한계 극복
- 연결 테이블용 엔티티 추가(연결 테이블을 엔티티로 승격한다.)
- @ManyToMany 를 @OneToMany와 @ManyToOne으로 변경해준다.
댓글 남기기