객체간 다대다 연관간계를 직접 매핑할 때 사용한다.
당연하지만 RDB 에는 직접 다대다 연관관계를 지정할 수 없기 때문에 중간 연결테이블이 있다.
@Entity
public class Category {
@ManyToMany
@JoinTable(name = "CATEGORY_ITEM",
joinColumns = @JoinColumn(name = "CATEGORY_ID"),
inverseJoinColumns = @JoinColumn(name = "ITEM_ID))
private List<Item> items = new ArrayList<Item>();
}
@Entity
public class Item {
@ManyToMany(mappedBy = "items")
private List<Category> categories = new ArrayList<Category>();
}
- DB에 CATEGORY, ITEM 테이블이 존재하고, 다대다 관계 매핑을 위한 테이블 CATEGORY_ITEM이 존재한다.
- CATEGORY 테이블은 CATEGORY_ID를 가지고 있고 다대다 매핑을 위해 사용하기 때문에 joinColumns 에 추가한다.
- 다대다 매핑을 원하는 ITEM테이블은 ITEM_ID를 조인시 사용하므로 inverseJoinColumns에 추가한다.
- 조인테이블에 키값 외에 부가적인 정보가 있는 경우엔 부가 데이터를 가지고 올 수 없다. 부가데이터까지 필요한 경우엔 결국 @OneToMany매핑을 통해 연결 테이블 또한 엔티티로 선언한다.
'JAVA' 카테고리의 다른 글
JPA Entity와 DB값 간 매핑 (0) | 2021.04.28 |
---|---|
JPA 지연로딩 (0) | 2021.04.28 |
JPA @Inheritance (0) | 2021.04.23 |
JPA CASCADE 종류 (0) | 2021.04.22 |
JAVA Optional 기초 (0) | 2021.03.19 |