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

일대다(OneToMany)와 다대일(ManyToOne)관계

by 해삼2 2024. 1. 19.
728x90
반응형
일대다(OneToMany)와 다대일(ManyToOne)관계

 

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

    @OneToMany(mappedBy = "shop")
    private List<Product> products;

    // Getter, Setter, Constructors, etc.
}

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

    private String productName;

    @ManyToOne
    @JoinColumn(name = "shop_id")
    private Shop shop;

    // Getter, Setter, Constructors, etc.
}

 

Shop 설명

 

1. Shop 엔터티는 @Entity 어노테이션을 통해 JPA 엔터티임을 나타내고,

@Id 어노테이션을 통해 기본 키(primary key) 필드를 정의합니다.

 

2. @GeneratedValue 어노테이션은 자동으로 기본 키를 생성하는 방식을 설정합니다.

(여기서는 IDENTITY 전략을 사용).


3. name은 간단한 문자열 필드로, 백화점의 이름을 나타냅니다.


4. @OneToMany 어노테이션은 일대다 관계를 나타냅니다. 

여기서는 한 백화점이 여러 상품을 가질 수 있음을 의미합니다. 

mappedBy 속성은 양방향 관계에서 어떤 필드가 관계의 주인인지를 나타냅니다.

 

Product 설명

 

1. Product 엔터티도 @Entity 어노테이션을 통해 JPA 엔터티임을 나타냅니다.

 

2. productName은 각 상품의 이름을 나타내는 문자열 필드입니다.

3. @ManyToOne 어노테이션은 다대일 관계를 나타냅니다.

여기서는 여러 상품이 하나의 백화점에 속할 수 있음을 의미합니다.

4. @JoinColumn 어노테이션은 외래 키(Foreign Key)를 지정합니다.

name 속성은 외래 키의 컬럼 이름을 나타내며, 여기서는 'shop_id'가 외래 키 컬럼으로 사용됩니다.

이러한 구조를 통해 백화점과 상품 간의 일대다 관계가 매핑되었습니다. 

Shop 엔터티는 여러 상품을 가질 수 있고, 각 상품은 하나의 백화점에 속합니다.

 

항상 외래키가 기준이다. 

 

 

*정리

백화점(shop)은 여러 개의 상품(Products)들을 가질 수 있어야 하니 이에 대한 관계는 백화점은 '일' 상품들은 '다'
이니까 OneToMany이고 상품은 여러가지 상품이 백화점 안에 진열 되어야 하니 ManyToOne으로 사용 해야 하고
이에 이어주는 조인 키는 Id키이다.
728x90
반응형