์คํ๋ง
JPA ํ์ฉ ํ๋ก์ ํธ - (1) ๋๋ฉ์ธ ๋ถ์
walbe0528
2022. 5. 10. 20:39
728x90
๋ฐ์ํ
๐ก ๊ตฌํ ๋ชฉํ ๊ธฐ๋ฅ
- ํ์ ๋ฑ๋ก/์กฐํ
- ์ํ ๋ฑ๋ก/์์ /์กฐํ (*์ํ์ ๋์, ์๋ฐ, ์ํ 3๊ฐ์ ์นดํ ๊ณ ๋ฆฌ๋ก + ์ฃผ๋ฌธ์ ๋ฐฐ์ก์ ๋ณด ์ ๋ ฅ)
- ์ฃผ๋ฌธ ๋ฑ๋ก/์กฐํ/์ทจ์
- ์ฌ๊ณ ๊ด๋ฆฌ
๐ก ์์กด์ฑ ์ถ๊ฐ
- Spring Web Starter
- Thymeleaf
- Spring Data JPA
- MariaDB Driver
- Lombok
๐ ํ ์ด๋ธ ์ค๊ณ
์ผ๋๋ค ๊ด๊ณ์์๋ ๋ค์ชฝ์ ๋ฌด์กฐ๊ฑด ์ธ๋ํค๊ฐ ์กด์ฌํ๋ค. (-> ์ธ๋ํค๊ฐ ์๋ ๊ณณ์ ์ฐ๊ด๊ด๊ณ์ ์ฃผ์ธ์ผ๋ก ์ ํ๋ฉด ๋๋ค.) !! ์ค๊ณ ๋จ๊ณ์์๋ ๊ฐ๊ธ์ ์๋ฐฉํฅ๋ณด๋จ ๋จ๋ฐฉํฅ์ผ๋ก ํ๋ ๊ฒ์ด ์ข๋ค.
- Member ์ํฐํฐ
@Entity
@Getter @Setter
public class Member {
@Id @GeneratedValue
@Column(name = "member_id")
private Long id;
private String name;
@Embedded // Embeddable, Embedded ๋ ์ค์ ํ๋๋ง ์ ์ด์ค๋ ๋๋ค
private Address address;
@OneToMany(mappedBy = "member") // Orderํ
์ด๋ธ์ ์๋ member์ ๋งคํ. ์ฌ๊ธฐ์๋ ์ฝ๊ธฐ์ ์ฉ์ด ๋๋ค.
private List<Order> orders = new ArrayList<>();
}
@OneToMany(mappedBy = "member") : Member <-> Order, ์ผ๋๋ค์ ์๋ฐฉํฅ ๊ด๊ณ
Orderํ ์ด๋ธ์ ์๋ member์ ๋งคํ๋๋ค.
mappedBy๊ฐ ๋ถ์ ์ํฐํฐ๋ ์ฐ๊ด๊ด๊ณ์ ์ฃผ์ธ์ด ์๋๋ค. Orderํ ์ด๋ธ์์ member๋ฅผ ๋ณ๊ฒฝํด์ผ ๊ฐ์ด ์ ๋ฐ์ดํธ ๋๋ค.
- Order ์ํฐํฐ
@Entity
@Getter @Setter
@Table(name = "orders")
public class Order {
@Id @GeneratedValue
@Column(name= "order_id")
private Long id;
@ManyToOne(fetch = LAZY)
@JoinColumn(name= "member_id") // FK์ ์ด๋ฆ์ด member_id
private Member member;
@OneToMany(mappedBy= "order", cascade = CascadeType.ALL)
private List<OrderItem> orderItems = new ArrayList<>(); // ์ฃผ๋ฌธํ ์ํ ๋ชฉ๋ก
@OneToOne(fetch = LAZY, cascade = CascadeType.ALL) // order์ ์ฅ์ delivery๋ ํจ๊ป persist
@JoinColumn(name = "delivery_id")
private Delivery delivery;
private LocalDateTime orderDate; // ์ฃผ๋ฌธ ์๊ฐ(์๊ฐ,๋ถ๊น์ง)
@Enumerated(EnumType.STRING)
private OrderStatus status; // ์ฃผ๋ฌธ์ ์ํ(ORDER, CANCEL)
}
- OrderItem ์ํฐํฐ
@Entity
@Getter @Setter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Table(name = "order_item")
public class OrderItem {
@Id @GeneratedValue
@Column(name = "order_item_id")
private Long id;
@ManyToOne(fetch = LAZY)
@JoinColumn(name = "item_id")
private Item item;
@ManyToOne(fetch = LAZY)
@JoinColumn(name = "order_id")
private Order order;
private int orderPrice; // ์ฃผ๋ฌธ ๊ฐ๊ฒฉ
private int count; // ์ฃผ๋ฌธ ์๋
728x90