다대다 관계를 나타내는 데 사용한다.
RDBMS 에서는 다대다 관계를 풀어내기 위해 @JoinTable 을 사용한다.
속성 | 기능 | 기본값 | |
mappedBy | 엔티티의 PK가 FK로 사용되고 있는 테이블의 필드명을 지정한다. 연관관계의 주인이 아니라는 설정이기도 하다.. |
||
cascade | 영속성 전이 기능을 사용한다. | 전파하지 않는다. | |
fetch | 글로벌 페치 전략을 설정한다. | ||
targetEntity | 연관된 엔티티의 타입 정보를 설정한다. |
다대다 단방 예제 코드
@Entity
public class Member {
@Id
@Column(name = "MEMBER_ID")
private String id;
@ManyToMany
@JoinTable(name = "MEMBER_PRODUCT",
joinColumns = @JoinColumn(name = "MEMBER_ID"),
inverseJoinColumns = @JoinColumn(name = "PRODUCT_ID"))
private List<Product> products = new ArrayList<>();
}
@Entity
public class Product {
@Id
@Column(name = "PRODUCT_ID")
private String id;
private String name;
}
다대다 양방향 예제 코드
@Entity
public class Member {
@Id
@Column(name = "MEMBER_ID")
private String id;
@ManyToMany
@JoinTable(name = "MEMBER_PRODUCT",
joinColumns = @JoinColumn(name = "MEMBER_ID"),
inverseJoinColumns = @JoinColumn(name = "PRODUCT_ID"))
private List<Product> products = new ArrayList<>();
public void addProduct(Product product){
products.add(product);
product.getMembers().add(this);
}
}
@Entity
public class Product {
@Id
@Column(name = "PRODUCT_ID")
private String id;
private String name;
@ManToMany(mappedBy = "Products")
private List<Member> members;
}
양방향은 연관 관계 주인 편의 메소드를 추가해서 관리하는 것이 편리하다.
728x90
'JVM > JPA' 카테고리의 다른 글
상속 관계 매핑 (슈퍼-서브 타입 모델링) (0) | 2023.06.17 |
---|---|
복합키 매핑 @IdClass, @EmbeddedId (0) | 2023.06.16 |
@OneToOne (0) | 2023.06.16 |
@OneToMany (0) | 2023.06.12 |
@ManyToOne, @JoinColumn (0) | 2023.06.12 |