본문 바로가기
인프런 강의/실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

다대다(ManyToMany) 관계

by 해삼2 2024. 1. 19.
728x90
반응형
다대다(ManyToMany) 관계

 

@Entity
public class Shop {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    
    private String name;

    @ManyToMany
    @JoinTable(
        name = "shop_brand",
        joinColumns = @JoinColumn(name = "shop_id"),
        inverseJoinColumns = @JoinColumn(name = "brand_id")
    )
    private List<Brand> brands;

    // Getter, Setter, Constructors, etc.
}

@Entity
public class Brand {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String brandName;

    @ManyToMany(mappedBy = "brands")
    private List<Shop> shops;

 

Shop 설명

 

1. @Entity: JPA 엔터티임을 나타냅니다.


2. @Id: 기본 키 필드를 나타냅니다.


3. @GeneratedValue: 기본 키를 자동으로 생성하는 전략을 설정합니다.


4. @ManyToMany: 다대다 관계를 나타냅니다.

Shop 엔터티는 여러 브랜드와 관계를 맺을 수 있습니다.


5. @JoinTable: 연결 테이블을 지정합니다.

shop_brand라는 테이블이 생성되어 shop_id와 brand_id 컬럼을 사용하여 두 엔터티를 연결합니다.

 

Brand 설명

 

1. @Entity: JPA 엔터티임을 나타냅니다.


2. @Id: 기본 키 필드를 나타냅니다.


3. @GeneratedValue: 기본 키를 자동으로 생성하는 전략을 설정합니다.


4. @ManyToMany: 다대다 관계를 나타냅니다. Brand 엔터티는 여러 백화점과 관계를 맺을 수 있습니다.


5. @mappedBy: 양방향 관계에서 상대방 엔터티의 필드를 지정합니다.

여기서는 Brand 엔터티가 Shop 엔터티의 brands 필드에 의해 매핑되었다는 것을 나타냅니다.


이를 통해 Shop과 Brand 간의 다대다 관계를 표현하고 있습니다. 

즉, 하나의 백화점은 여러 브랜드를 가질 수 있고, 하나의 브랜드도 여러 백화점에 속할 수 있습니다.

이러한 다대다 관계는 shop_brand라는 연결 테이블을 통해 중간에 매핑됩니다.

 

*정리

백화점은(Shop)은 여러 브랜드(Brand)를 가질수 있고, 하나의 브랜드는 여러 백화점에 속할 수 있으므로 서로 다대다 관계 ManyToMany인 형태이며 서로의 대한 조인 키는 아이디 이고 joinColumns와 inverseJoinColumns를 사용하여 각각의 엔터티의 외래 키(Foreign Key)를 지정했습니다. 이때 어느 한쪽만 조인으로 이어주면 되고 나머지 쪽에서는 mappedBy를 사용하는 것이 관례입니다.
728x90
반응형