728x90
2.엔티티 클래스 개발1
Member 엔티티
@Entity
@Getter @Setter
public class Member {
@Id @GeneratedValue
@Column(name="member_id")
private Long id;
private String name;
@Embedded
private Address address;
@OneToMany(mappedBy = "member")
private List<Order> orders=new ArrayList<>();
}
- @Id : 기본키 @GenerateValue : 자동으로 값이증가
- @Column : 컬럼의 이름을 member_id로 바꾸어줌
- @Embedded : 임베디드 타입 값타입하는곳에 표시
- @OneToMany : 1대다 관계를 표시한다 mappedBy="member"를 이용하여 연관관계의 주인을 정해준다
Order 엔티티
@Entity
@Table(name = "orders")
@Getter @Setter
public class Order {
@Id @GeneratedValue
@Column(name = "order_id")
private Long id;
@ManyToOne
@JoinColumn(name = "member_id")
private Member member;
@OneToMany(mappedBy = "order")
private List<OrderItem> orderItems = new ArrayList<>();
@OneToOne
@JoinColumn(name = "delivery_id")
private Delivery delivery;
private LocalDateTime orderDate; //주문시간
@Enumerated(EnumType.STRING)
private OrderStatus status; //주문상태 ORDER , CANCEL
}
- @Table(name="orders") : 테이블 명을 orders로 바꾸어준다
- @ManyToOne : 다대일 관계를 표시
- @JoinColumn(name = "member_id") 연결되는 컬럼명을 적어준다
- @OneToOne delivery와 1대1 관계 이다
- @Enumerated(EnumType.STRING) Enum을쓸때는 무조건 String 중간에 값을 넣을수 있다
OrderItem
@Entity
@Getter @Setter
public class OrderItem {
@Id @GeneratedValue
@Column(name = "order_item_id")
private Long id;
@ManyToOne
@JoinColumn(name = "item_id")
private Item item;
@ManyToOne
@JoinColumn(name = "order_id")
private Order order;
private int orderPrice; //주문가격
private int count; //주문수량
}
OrderStatus
public enum OrderStatus {
ORDER,CANCEL
}
Delivery
@Entity
@Getter @Setter
public class Delivery {
@Id @GeneratedValue
@Column(name = "deliver_id")
private Long id;
@OneToOne(mappedBy = "delivery")
private Order order;
@Embedded
private Address address;
@Enumerated(EnumType.STRING)
private DeliveryStatus status; //READY,COMP
}
- @OneToOne(mappedBy = "delivery") delivery는 order의 연관관계의 주인이다
DeliveryStatus
public enum DeliveryStatus {
READY,COMP
}
Address
@Embeddable
@Getter
public class Address {
private String city;
private String street;
private String zipcode;
}
- @Embeddable : 값타입을 정의하는곳
Item
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "dtype")
@Getter @Setter
public abstract class Item {
@Id
@GeneratedValue
@Column(name="item_id")
private Long id;
private String name;
private int price;
private int stockQuantity;
}
@Entity
@DiscriminatorValue("B")
@Getter
@Setter
public class Book extends Item{
private String author;
private String isbn;
}
@Entity
@DiscriminatorValue("M")
@Getter
@Setter
public class Movie extends Item{
private String director;
private String actor;
}
@Entity
@DiscriminatorValue("A")
@Getter
@Setter
public class Album extends Item{
private String artist;
private String etc;
}
- 상품클래스는 직접 생성해서 사용하지 않아서 abstract(추상클래스)로 만들었다
- @Inheritance(strategy = InheritanceType.SINGLE_TABLE) 을 이용해서 싱글테이블로 만듬
- @DiscriminatorColumn(name = "dtype") 을 이용해서 name속성에 dtype이라는 구분 컬럼을 만듬
- @DiscriminatorValue("A") 구분컬럼에 입력되는값
자식 엔티티가 매핑한 컬럼은 모두 null을 허용해야 한다
출처
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 (JPA 웹 애플리케이션 1)
728x90
'Back-End > Spring Data' 카테고리의 다른 글
5.상품도메인 개발 (0) | 2020.12.30 |
---|---|
4.회원도메인 개발 (0) | 2020.12.30 |
3.엔티티클래스 개발2 (0) | 2020.12.30 |
1.도메인 분석설계 (0) | 2020.12.30 |
0.JPA공부 (0) | 2020.12.26 |