본문 바로가기
Back-End/Spring Data

2.엔티티 클래스 개발1

by 두두리안 2020. 12. 30.
728x90

2.엔티티 클래스 개발1

image

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