From 11d160b3faaf2d6ddf20d5edc37b46fb1c71e3b6 Mon Sep 17 00:00:00 2001 From: haerong22 Date: Tue, 24 Jan 2023 20:25:25 +0900 Subject: [PATCH] #30 jpa basic: relation mapping --- .../jpa/relationmapping/ex03/JpaMain.java | 28 ++++++++ .../relationmapping/ex03/domain/Category.java | 29 ++++++++ .../relationmapping/ex03/domain/Delivery.java | 22 ++++++ .../ex03/domain/DeliveryStatus.java | 4 ++ .../jpa/relationmapping/ex03/domain/Item.java | 52 ++++++++++++++ .../relationmapping/ex03/domain/Member.java | 69 +++++++++++++++++++ .../relationmapping/ex03/domain/Order.java | 69 +++++++++++++++++++ .../ex03/domain/OrderItem.java | 62 +++++++++++++++++ .../ex03/domain/OrderStatus.java | 6 ++ .../main/resources/META-INF/persistence.xml | 12 +++- 10 files changed, 350 insertions(+), 3 deletions(-) create mode 100644 hello-jpa/src/main/java/com/hello/jpa/relationmapping/ex03/JpaMain.java create mode 100644 hello-jpa/src/main/java/com/hello/jpa/relationmapping/ex03/domain/Category.java create mode 100644 hello-jpa/src/main/java/com/hello/jpa/relationmapping/ex03/domain/Delivery.java create mode 100644 hello-jpa/src/main/java/com/hello/jpa/relationmapping/ex03/domain/DeliveryStatus.java create mode 100644 hello-jpa/src/main/java/com/hello/jpa/relationmapping/ex03/domain/Item.java create mode 100644 hello-jpa/src/main/java/com/hello/jpa/relationmapping/ex03/domain/Member.java create mode 100644 hello-jpa/src/main/java/com/hello/jpa/relationmapping/ex03/domain/Order.java create mode 100644 hello-jpa/src/main/java/com/hello/jpa/relationmapping/ex03/domain/OrderItem.java create mode 100644 hello-jpa/src/main/java/com/hello/jpa/relationmapping/ex03/domain/OrderStatus.java diff --git a/hello-jpa/src/main/java/com/hello/jpa/relationmapping/ex03/JpaMain.java b/hello-jpa/src/main/java/com/hello/jpa/relationmapping/ex03/JpaMain.java new file mode 100644 index 00000000..3b3f98b1 --- /dev/null +++ b/hello-jpa/src/main/java/com/hello/jpa/relationmapping/ex03/JpaMain.java @@ -0,0 +1,28 @@ +package com.hello.jpa.relationmapping.ex03; + +import javax.persistence.EntityManager; +import javax.persistence.EntityManagerFactory; +import javax.persistence.EntityTransaction; +import javax.persistence.Persistence; + +public class JpaMain { + + public static void main(String[] args) { + EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello"); + + EntityManager em = emf.createEntityManager(); + + EntityTransaction tx = em.getTransaction(); + tx.begin(); + + try { + tx.commit(); + } catch (Exception e) { + tx.rollback(); + } finally { + em.close(); + } + + emf.close(); + } +} diff --git a/hello-jpa/src/main/java/com/hello/jpa/relationmapping/ex03/domain/Category.java b/hello-jpa/src/main/java/com/hello/jpa/relationmapping/ex03/domain/Category.java new file mode 100644 index 00000000..6b323f03 --- /dev/null +++ b/hello-jpa/src/main/java/com/hello/jpa/relationmapping/ex03/domain/Category.java @@ -0,0 +1,29 @@ +package com.hello.jpa.relationmapping.ex03.domain; + +import javax.persistence.*; +import java.util.ArrayList; +import java.util.List; + +@Entity +public class Category { + + @Id @GeneratedValue + private Long id; + + private String name; + + @ManyToOne + @JoinColumn(name = "PARENT_ID") + private Category parent; + + @OneToMany(mappedBy = "parent") + private List child = new ArrayList<>(); + + @ManyToMany + @JoinTable( + name = "CATEGORY_ITEM", + joinColumns = @JoinColumn(name = "CATEGORY_ID"), + inverseJoinColumns = @JoinColumn(name = "ITEM_ID") + ) + private List items = new ArrayList<>(); +} diff --git a/hello-jpa/src/main/java/com/hello/jpa/relationmapping/ex03/domain/Delivery.java b/hello-jpa/src/main/java/com/hello/jpa/relationmapping/ex03/domain/Delivery.java new file mode 100644 index 00000000..e8187bd8 --- /dev/null +++ b/hello-jpa/src/main/java/com/hello/jpa/relationmapping/ex03/domain/Delivery.java @@ -0,0 +1,22 @@ +package com.hello.jpa.relationmapping.ex03.domain; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.OneToOne; + +@Entity +public class Delivery { + + @Id @GeneratedValue + private Long id; + + private String city; + private String street; + private String zipcode; + + private DeliveryStatus status; + + @OneToOne(mappedBy = "delivery") + private Order order; +} diff --git a/hello-jpa/src/main/java/com/hello/jpa/relationmapping/ex03/domain/DeliveryStatus.java b/hello-jpa/src/main/java/com/hello/jpa/relationmapping/ex03/domain/DeliveryStatus.java new file mode 100644 index 00000000..0db4318e --- /dev/null +++ b/hello-jpa/src/main/java/com/hello/jpa/relationmapping/ex03/domain/DeliveryStatus.java @@ -0,0 +1,4 @@ +package com.hello.jpa.relationmapping.ex03.domain; + +public enum DeliveryStatus { +} diff --git a/hello-jpa/src/main/java/com/hello/jpa/relationmapping/ex03/domain/Item.java b/hello-jpa/src/main/java/com/hello/jpa/relationmapping/ex03/domain/Item.java new file mode 100644 index 00000000..8ddbb130 --- /dev/null +++ b/hello-jpa/src/main/java/com/hello/jpa/relationmapping/ex03/domain/Item.java @@ -0,0 +1,52 @@ +package com.hello.jpa.relationmapping.ex03.domain; + +import javax.persistence.*; +import java.util.ArrayList; +import java.util.List; + +@Entity +public class Item { + + @Id @GeneratedValue + @Column(name = "item_id") + private Long id; + + private String name; + private int price; + private int stockQuantity; + + @ManyToMany(mappedBy = "items") + private List categories = new ArrayList<>(); + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public int getPrice() { + return price; + } + + public void setPrice(int price) { + this.price = price; + } + + public int getStockQuantity() { + return stockQuantity; + } + + public void setStockQuantity(int stockQuantity) { + this.stockQuantity = stockQuantity; + } +} diff --git a/hello-jpa/src/main/java/com/hello/jpa/relationmapping/ex03/domain/Member.java b/hello-jpa/src/main/java/com/hello/jpa/relationmapping/ex03/domain/Member.java new file mode 100644 index 00000000..185bdb2d --- /dev/null +++ b/hello-jpa/src/main/java/com/hello/jpa/relationmapping/ex03/domain/Member.java @@ -0,0 +1,69 @@ +package com.hello.jpa.relationmapping.ex03.domain; + +import javax.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 orders = new ArrayList<>(); + + public List getOrders() { + return orders; + } + + public void setOrders(List orders) { + this.orders = orders; + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getCity() { + return city; + } + + public void setCity(String city) { + this.city = city; + } + + public String getStreet() { + return street; + } + + public void setStreet(String street) { + this.street = street; + } + + public String getZipcode() { + return zipcode; + } + + public void setZipcode(String zipcode) { + this.zipcode = zipcode; + } +} diff --git a/hello-jpa/src/main/java/com/hello/jpa/relationmapping/ex03/domain/Order.java b/hello-jpa/src/main/java/com/hello/jpa/relationmapping/ex03/domain/Order.java new file mode 100644 index 00000000..ebb70da2 --- /dev/null +++ b/hello-jpa/src/main/java/com/hello/jpa/relationmapping/ex03/domain/Order.java @@ -0,0 +1,69 @@ +package com.hello.jpa.relationmapping.ex03.domain; + +import javax.persistence.*; +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; + +@Entity +@Table(name = "orders") +public class Order { + + @Id @GeneratedValue + @Column(name = "order_id") + private Long id; + + @ManyToOne + @JoinColumn(name = "member_id") + private Member member; + + @OneToOne + @JoinColumn(name = "DELIVERY_ID") + private Delivery delivery; + + private LocalDateTime orderDate; + + @Enumerated(EnumType.STRING) + private OrderStatus status; + + @OneToMany(mappedBy = "order") + private List orderItems = new ArrayList<>(); + + public void addOrderItem(OrderItem orderItem) { + orderItems.add(orderItem); + orderItem.setOrder(this); + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Member getMember() { + return member; + } + + public void setMember(Member member) { + this.member = member; + } + + public LocalDateTime getOrderDate() { + return orderDate; + } + + public void setOrderDate(LocalDateTime orderDate) { + this.orderDate = orderDate; + } + + public OrderStatus getStatus() { + return status; + } + + public void setStatus(OrderStatus status) { + this.status = status; + } + +} diff --git a/hello-jpa/src/main/java/com/hello/jpa/relationmapping/ex03/domain/OrderItem.java b/hello-jpa/src/main/java/com/hello/jpa/relationmapping/ex03/domain/OrderItem.java new file mode 100644 index 00000000..143ae316 --- /dev/null +++ b/hello-jpa/src/main/java/com/hello/jpa/relationmapping/ex03/domain/OrderItem.java @@ -0,0 +1,62 @@ +package com.hello.jpa.relationmapping.ex03.domain; + +import javax.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; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Order getOrder() { + return order; + } + + public void setOrder(Order order) { + this.order = order; + } + + public Item getItem() { + return item; + } + + public void setItem(Item item) { + this.item = item; + } + + public int getOrderPrice() { + return orderPrice; + } + + public void setOrderPrice(int orderPrice) { + this.orderPrice = orderPrice; + } + + public int getCount() { + return count; + } + + public void setCount(int count) { + this.count = count; + } +} diff --git a/hello-jpa/src/main/java/com/hello/jpa/relationmapping/ex03/domain/OrderStatus.java b/hello-jpa/src/main/java/com/hello/jpa/relationmapping/ex03/domain/OrderStatus.java new file mode 100644 index 00000000..1f62ae78 --- /dev/null +++ b/hello-jpa/src/main/java/com/hello/jpa/relationmapping/ex03/domain/OrderStatus.java @@ -0,0 +1,6 @@ +package com.hello.jpa.relationmapping.ex03.domain; + +public enum OrderStatus { + + ORDER, CANCEL +} diff --git a/hello-jpa/src/main/resources/META-INF/persistence.xml b/hello-jpa/src/main/resources/META-INF/persistence.xml index e6043e37..2199864f 100644 --- a/hello-jpa/src/main/resources/META-INF/persistence.xml +++ b/hello-jpa/src/main/resources/META-INF/persistence.xml @@ -15,9 +15,15 @@ - com.hello.jpa.relationmapping.ex02.domain.Member - com.hello.jpa.relationmapping.ex02.domain.Team - com.hello.jpa.relationmapping.ex02.domain.Locker + + + + com.hello.jpa.relationmapping.ex03.domain.Category + com.hello.jpa.relationmapping.ex03.domain.Delivery + com.hello.jpa.relationmapping.ex03.domain.Item + com.hello.jpa.relationmapping.ex03.domain.Member + com.hello.jpa.relationmapping.ex03.domain.Order + com.hello.jpa.relationmapping.ex03.domain.OrderItem