ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 연관관계 매핑 기초 - 실전예제
    김영한(인프런 강의)/자바 ORM 표준 JPA 프로그래밍 2020. 10. 19. 13:12
    반응형

    실습

    1. 관계도

     

    2. ERD

    3. 엔티티 상세

    4. 참고사항

        1) 테이블의 N:M 관계는 중간 테이블을 이용해서 1:N, N:1 

        2) 실전에서는 중간 테이블이 단순하지 않다. 

        3) @ManyToMany는 제약: 필드 추가X, 엔티티 테이블 불일치

        4) 실전에서는 @ManyToMany 사용X

    5. 코드

    @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<>();
    	
    	Getter(), Setter() ...
    }

     

    @Entity
    public class Delivery {
    	@Id
    	@GeneratedValue
    	private Long id;
    
    	private String city;
    	private String street;
    	private String zipcode;
    	private DeliveryStatus status;
    
    	@OneToOne
    	@JoinColumn(name = "delivery")
    	private Orders order;
        
        Getter(), Setter() ...
     }

     

    public enum DeliveryStatus {
    }
    

     

    @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<>();
        
        Getter(), Setter() ...
    }

     

    @Entity
    public class Member {
    	@Id
    	@GeneratedValue
    	@Column(name = "MEMBER_ID")
    	private Long id;
    	@Column(name = "USERNAME")
    	private String name;
    	private int age;
    	@OneToMany
    	@JoinColumn(name = "member")
    	private List<Order> orders = new ArrayList<>();
        
        Getter(), Setter() ...
    }

     

    @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;
    	
    	@OneToMany(mappedBy = "order")
    	private List<OrderItem> orderItems = new ArrayList<>();
    
    	private LocalDateTime orderDate;
    
    	@Enumerated(EnumType.STRING)
    	private OrderStatus status;
        
        Getter(), Setter() ...
    }

     

    @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;
        
        Getter(), Setter() ...
    }  

     

    public enum OrderStatus {
    	ORDER, CANCEL
    }

     

    public class JpaStudyApplication {
    
    	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();
    	}
    }

     

    반응형
Designed by Tistory.