@ManyToMany를 사용하면 연결 테이블을 자동으로 처리해주므로 도메인 모델이 단순해지고 여러 가지로 편리하다하지만, 단순한 컬럼은 상관없지만,수량이나 주문 날짜 등의 컬럼이 더 필요한 경우가 대부분이다.

이런 경우는 @ManyToMany를 사용할 수 없다. 주문 엔티티나 상품 엔티티에는 추가한 컬럼들을 매핑할 수 없기 때문이다.연결 테이블을 매핑하는 연결 엔티티를 만들고 이곳에 추가한 컬럼들을 매핑하는 것이 좋다.

학원_4-페이지-33_98.jpg

엔티티 구현

@Entity
public class Member{

@Id 
@Column(name="MEMBER_ID")
private String id;
private String username;

@OneToMany(mappedby="member")
private List<Order> odrders = new ArrayList<Order>();
...

}
@Entity
public class Product{

@Id 
@Column(name= "PROUDCT_ID")
private String id;
private String name;

}

@Entity
public class Order {
@Id @GeneratedValue
@Column(name="ORDER_ID")
private Long Id;

@ManyToOne
@JoinColum(name="MEMBER_ID")
privatee Member member;

@ManyToOne
@JoinColumn(name="PRODUCT_ID")
private Product product;
private int orderAmount;

...
}

다대다 연관 관계 정리

다대다 관계를 일대다 다대일 관계로 풀어내기 위해 테이블을 만들때 식별자를 어떻게 구성할 지 선택해야 한다.

Untitled