Member와 Order는 1:N 관계
// Member
@Entity
@Getter @Setter
public class Member {
@Id @GeneratedValue
@Colume(name = "member_id")
private Long id;
private String name;
@Embedded
private Address address;
@OneToMany(mappedBy = "member") // Order 테이블에 있는 member 필드에 의해서 mapping 되었다는 뜻, 읽기 전용이 됨
private List<Order> orders = new ArrayList<>();
}
// Order
@Entity
@Table(name = "orders")
@Getter @Setter
public class Order {
@Id @GeneratedValue
@Colume(name = "order_id")
private Long id;
@ManyToOne
@JoinColumn(name = "member_id") // foreign key 이름이 member_id
private Member member;
private List<OrderItem> orderItems = new ArrayList<>();
private Delivery delivery;
private LocalDateTime orderDate; // 주문시간
private OrderStatus status; // 주문상태 [ORDER, CANCEL]
}
// OrderStatus
public enum OrderStatus {
ORDER, CANCEL
}
테이블 상속
@Interitance(strategy = InheritanceType.SINGLE_TABLE)
- SINGLE_TABLE: 테이블 하나에 넣음
- 상속 받은 클래스에서
@DiscriminatorValue("B")
처럼 테이블 명 지정
- 상속 받은 클래스에서
- TABLE_PER_CLASS: 클래스별로 테이블이 나옴
- JOINED: 가장 정규화된 스타일
Enum 타입
@Enumerated(EnumType.STRING)
- ORDINAL은 1, 2, 3 숫자로 나옴-> 중간에 수정되면 숫자가 밀리기 때문에 절대 사용 금지
다대다 관계
@ManyToMany
@JoinTable(name = "category_item", // 중간 테이블 지정
joinColumns = @JoinColumn(name = "category_id"), // 중간 테이블에 있는 키
inverseJoinColumns = @JoinColumn(name = "item_id") // category_item에 아이템 쪽
) // Category 테이블
자기참조
public class Category {
@ManyToOne
@JoinColumn(name = "parent_id")
private Category parent;
@OneToMany(mappedBy = "parent")
private List<Category> child = new ArrayList<>();
}