#30 jpa basic: relation mapping

This commit is contained in:
haerong22
2023-01-24 20:25:25 +09:00
parent b3d8efc094
commit 11d160b3fa
10 changed files with 350 additions and 3 deletions

View File

@@ -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();
}
}

View File

@@ -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<Category> child = new ArrayList<>();
@ManyToMany
@JoinTable(
name = "CATEGORY_ITEM",
joinColumns = @JoinColumn(name = "CATEGORY_ID"),
inverseJoinColumns = @JoinColumn(name = "ITEM_ID")
)
private List<Item> items = new ArrayList<>();
}

View File

@@ -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;
}

View File

@@ -0,0 +1,4 @@
package com.hello.jpa.relationmapping.ex03.domain;
public enum DeliveryStatus {
}

View File

@@ -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<Category> 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;
}
}

View File

@@ -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<Order> orders = new ArrayList<>();
public List<Order> getOrders() {
return orders;
}
public void setOrders(List<Order> 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;
}
}

View File

@@ -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<OrderItem> 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;
}
}

View File

@@ -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;
}
}

View File

@@ -0,0 +1,6 @@
package com.hello.jpa.relationmapping.ex03.domain;
public enum OrderStatus {
ORDER, CANCEL
}

View File

@@ -15,9 +15,15 @@
<!-- <class>com.hello.jpa.relationmapping.ex01.domain.Member</class>-->
<!-- <class>com.hello.jpa.relationmapping.ex01.domain.Order</class>-->
<!-- <class>com.hello.jpa.relationmapping.ex01.domain.OrderItem</class>-->
<class>com.hello.jpa.relationmapping.ex02.domain.Member</class>
<class>com.hello.jpa.relationmapping.ex02.domain.Team</class>
<class>com.hello.jpa.relationmapping.ex02.domain.Locker</class>
<!-- <class>com.hello.jpa.relationmapping.ex02.domain.Member</class>-->
<!-- <class>com.hello.jpa.relationmapping.ex02.domain.Team</class>-->
<!-- <class>com.hello.jpa.relationmapping.ex02.domain.Locker</class>-->
<class>com.hello.jpa.relationmapping.ex03.domain.Category</class>
<class>com.hello.jpa.relationmapping.ex03.domain.Delivery</class>
<class>com.hello.jpa.relationmapping.ex03.domain.Item</class>
<class>com.hello.jpa.relationmapping.ex03.domain.Member</class>
<class>com.hello.jpa.relationmapping.ex03.domain.Order</class>
<class>com.hello.jpa.relationmapping.ex03.domain.OrderItem</class>
<properties>
<!-- 필수 속성 -->