ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 다양한 연관관계 매핑2
    JPA 2023. 1. 3. 18:06

    다대다

    관계형 데이터베이스는 정규화된테이블 2개로 다대다 관계를 표현할 수 없다.
    연결테이블을 추가해서 일대다, 다대일 관계로 풀어내야 한다.

    논리적 데이터베이스 모델링 과정에서 다대다 관계로 변환하는 과정을 생각하면 이해가 쉽다.

    그러나, 객체는 컬렉션을 사용해서 객체 2개로 다대다 관계가 가능하다.

    Member는 ProductList, Product는 멤버List를 가지면 되기 때문이다.

     

    @ManyToMany
    @JoinTable(name = "MEMBER_PRODUCT")
    private List<Product> products = new ArrayList<>();

    joinTable로 테이블에서 필요한 중간 테이블을 생성한다.

     

    그러나,,,

    매핑정보만 들어가고, 중간테이블에 추가 정보가 들어가는 것이 불가능하다.

    또한 중간테이블때문에 쿼리도 굉장히 복잡하게 나온다.

    • 연결 테이블이 단순히 연결만 하고 끝나지 않음
    • 주문시간, 수량 같은 데이터가 들어올 수 있음

    따라서 연결 테이블용 엔티티를 추가하고 @OneToMay, @ManyToOne으로 나누어서 사용한다.

     

    중간 테이블을 Entity로 승격시킨다.

     

    @Entity
    public class MemberProduct {
        @Id
        @GeneratedValue
        private Long id;
    
        @ManyToOne
        @JoinColumn(name = "MEMBER_ID")
        private Member member;
        
        @ManyToOne
        @JoinColumn(name = "PRODUCT_ID")
        private Product product;
    }

    이때 다른 것들을 추가하여 넣을 수 있다는 장점이 있다.

    728x90

    'JPA' 카테고리의 다른 글

    프록시  (0) 2023.01.04
    상속관계  (0) 2023.01.04
    다양한 연관관계 매핑1  (0) 2023.01.03
    연관관계의 주인  (0) 2023.01.03
    연관관계 매칭  (0) 2023.01.03

    댓글

Designed by Tistory.