웹 애플리케이션 개발 2

2023. 5. 10. 07:38카테고리 없음

주소 클래스

package jpabook.jpashop.domain;

import jakarta.persistence.Embeddable;
import jakarta.validation.constraints.Email;
import lombok.Getter;

@Embeddable
@Getter
public class Address {

    private String city;
    private String street;
    private String zipcode;

    protected Address() {
    }

    public Address(String city, String street, String zipcode) {
        this.city = city;
        this.street = street;
        this.zipcode = zipcode;
    }
}

카테고리 클래스

package jpabook.jpashop.domain;

import jakarta.persistence.*;
import jpabook.jpashop.domain.item.Item;
import lombok.Getter;
import lombok.Setter;

import java.util.ArrayList;
import java.util.List;

import static jakarta.persistence.FetchType.*;

@Entity
@Getter
@Setter
public class Category {

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

    private String name;

    @ManyToMany
    @JoinTable(name = "category_item",
            joinColumns = @JoinColumn(name = "category_id"), //joinColumns 불러와서
            // 객체는 각 컬렉션 관계가 다대다로 가능해서 중간 테이블이 필요없지만,
            // JoinTable : 데이터베이스는 그게 없기 때문에 중간테이블이 있어야 가능함.(다대일로 일대다로 풀어내는 중간테이블)
            inverseJoinColumns = @JoinColumn(name = "item_id"))
    //category 테이블에서 아이템쪽으로 들어가는 db를 불러오는.

    private List<Item> items = new ArrayList<>(); // 다대다이므로 카테고리는 아이템을 리스트로 가지고,

    @ManyToOne(fetch = LAZY) //기본적으로 @XToOne은 절대 사용하면 안되는 EAGER이기 때문에 LAZY로 무조건적으로 바꿔야됨.
    // 다대일 (부모와 나)
    @JoinColumn(name = "parent_id")
    private Category parent;

    @OneToMany(mappedBy = "parent") //다른 Entity가 아님.
    // 일대다(나와 자식들)
    private List<Category> child = new ArrayList<>();
    //==연관관계 편의 메서드==//
    public void addChildCategory(Category child) {
        this.child.add(child);
        child.setParent(this);
    }
}

배달 클래스

package jpabook.jpashop.domain;

import jakarta.persistence.*;
import lombok.Getter;
import lombok.Setter;

import static jakarta.persistence.FetchType.LAZY;

@Entity
@Getter
@Setter
public class Delivery {
    @Id
    @GeneratedValue
    @Column(name = "delivery_id")
    private Long id;

    @OneToOne(mappedBy = "delivery", fetch = LAZY)
    //주문은 배달의 의해서 매핑됨.
    private Order order;

    @Embedded
    private Address address;

    @Enumerated(EnumType.STRING)
    // enum타입을 넣을때 주의 해야하는 것은 Enumerater를 꼭 넣어야하고, 타입중 ODINAL 이랑 STRING중에 선택해야하는데,
    // ODINAL : 1,2,3,4 이렇게 숫자로 들어감. (READY면 1, COMP면 2이렇게 들어가는데 중간에 갑자기 XXX가 들어가면 순서가 갑자기 밀리기 때문에 망함.)
    // STRING : 중간에 어떤 값이 들어가도 상관이 없음(무조건 이거쓰셈)
    private DeliveryStatus status; // 배송 상태
    //ENUM [READY(준비), COMP(배송)]
}

배달 상태를 보여주는 eunm

package jpabook.jpashop.domain;

public enum DeliveryStatus { //enum
    READY, COMP
}

 

출처 : 인프런 강의: 실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8-JPA-%ED%99%9C%EC%9A%A9-1/dashboard