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
반응형
'인프런 강의 > 실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발' 카테고리의 다른 글
일대일(OneToOne) 관계 (0) | 2024.01.19 |
---|---|
다대다(ManyToMany) 관계 (0) | 2024.01.19 |
JPA주요 관계 매핑 타입 (0) | 2024.01.19 |
Spring-Boot 의존성 라이브러리 종류 (0) | 2024.01.10 |
Thymeleaf란 무엇인가 (0) | 2024.01.10 |