웹 애플리케이션 개발 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 - 웹 애플리케이션 개발