JVM/JPA

@ManyToMany

kyoulho 2023. 6. 16. 17:26

다대다 관계를 나타내는 데 사용한다.

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;
}

양방향은 연관 관계 주인 편의 메소드를 추가해서 관리하는 것이 편리하다.

'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