테이블 구조
Member Entity
- Order Entity와 1대 다 단방향 관계
package jbabook.jpa.shop.domain;
import jakarta.persistence.*;
import java.util.ArrayList;
import java.util.List;
@Entity
public class Member {
@Id
@GeneratedValue
@Column(name = "MEMBER_ID")
private Long id;
private String name;
private String city;
private String street;
private String zipcode;
@OneToMany(mappedBy = "member")
private List<Order> orders = new ArrayList<>();
}
Order Entity
- Member Entity와 다대1 단방향 관계 (외래키 주인)
- OrderItem Entity와 1대다 양방향 관계
- 주문내역을 보고 주문 상품들을 확인하는 경우도 많기 때문에 양방향으로 설계함
package jbabook.jpa.shop.domain;
import jakarta.persistence.*;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
@Entity
@Table(name = "ORDERS") // Order 테이블을 만들 수 없는 DB가 있는 경우도 있음. 그래서 ORDERS로 이름 수정
public class Order {
@Id
@GeneratedValue
@Column(name = "ORDER_ID")
private Long id;
@ManyToOne
@JoinColumn(name = "MEMBER_ID")
private Member member;
// 주문으로 주문 상품들을 확인하는 경우가 많기 때문에 양방향으로 만들어줌.
// OrderItem에 Order의 변수명은 order이기 때문에 mappedBy="order"
@OneToMany(mappedBy = "order")
private List<OrderItem> orderItems = new ArrayList<>();
private LocalDateTime orderDate;
@Enumerated(EnumType.STRING)
private OrderStatus status;
}
OrderItem Entity
- Order Entity와 다대1 양방향 관계(외래키 주인)
- Item Entity와 다대1 단방향 관계
- 상품을 보고 주문 내역을 확인하지는 않는 경우가 많아고 생각해서 단방향으로 설계
package jbabook.jpa.shop.domain;
import jakarta.persistence.*;
@Entity
public class OrderItem {
@Id
@GeneratedValue
@Column(name = "ORDER_ITEM_ID")
private Long id;
@ManyToOne
@JoinColumn(name = "ORDER_ID")
private Order order;
@ManyToOne
@JoinColumn(name = "ITEM_ID")
private Item item;
private int orderPrice;
private int count;
}
Item Entity
package jbabook.jpa.shop.domain;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.Id;
@Entity
public class Item {
@Id
@GeneratedValue
@Column(name = "ITEM_ID")
private Long id;
private String name;
private int price;
private int stockQuantity;
}
Entity 설계만 보기 위해서 getter와 setter는 생략했다.
요즘 김영한님의 강의를 보면서 복습하고 있는데, 이전에는 무조건 양방향으로 설계해야 좋은 코드라고 생각했었는데 이 생각이 복습하면서 바뀌었다.
'JPA' 카테고리의 다른 글
[JPA] 상속관계 매핑 (0) | 2024.01.11 |
---|---|
[JPA] 다양한 연관관계 매핑 (0) | 2024.01.11 |
[JPA] 연관 관계 매핑 기초2 (양방향) (1) | 2024.01.09 |
[JPA] 연관 관계 매핑 기초1 (단방향) (1) | 2024.01.09 |
[JPA] 기본 매핑 - 예제 Entity (1) | 2024.01.09 |