JPA 다대다(N:M @ManyToMany) 연관관계

KMS·2022년 4월 5일
0

JPA Basics

목록 보기
7/20

Item 객체

@Entity
public class Item {

    @Id
    @GeneratedValue()
    @Column(name = "ITEM_ID")
    private Long id;

    private String name;
    private Integer price;
    private Integer stockQuantity;

    @ManyToMany(mappedBy = "itemList")
    private List<Category> categoryList = new ArrayList<>();
}

Category 객체

@Entity
public class Category {

    @Id
    @GeneratedValue
    private Long id;

    private String name;

    @ManyToOne
    @JoinColumn(name = "PARENT_ID")
    private Category parent;

    /**
     * 다대다(N:M) 관계는 사용 추천 X && 실무에서 사용 X
     * 중간 테이블(category_item)을 이용해서 item과 category 간 다대다 연관관계 성립
     * But, 실전에서는 중간 테이블에 연결할때 필요한 정보 외에 다른 정보들이 추가되는 경우가 많음
     * 그렇기 때문에, 실무에서는 살용적이지 않음
     */
    @ManyToMany
    @JoinTable(name = "CATEGORY_ITEM",
            joinColumns = @JoinColumn(name = "CATEGORY_ID"),
            inverseJoinColumns = @JoinColumn(name = "ITEM_ID")
    )
    private List<Item> itemList = new ArrayList<>();

    @OneToMany(mappedBy = "parent")
    private List<Category> child = new ArrayList<>();


}

JPA에서 다대다(N:M) 연관관계를 성립시켜주기 위해서는, 연관관계를 맺어줄 두 테이블 사이에 중간 테이블을 하나 생성하고, 중간 테이블을 각각 1:N과 N:1 연관관계를 맺어주어야 한다.
중간 테이블에는 각 테이블을 참조할 외래키(FK)를 하나씩 저장하는데, 실무에서는 외래키들만 갖고 있기 어렵고, 여러 추가 정보들이 저장되어야하는 경우들이 많기 때문에 실무에서는 잘 사용되지 않는다.

profile
Student at Sejong University Department of Software

0개의 댓글