ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 엔티티 매핑 - 실습 예제를 통한 데이터 중심 설계의 문제점
    김영한(인프런 강의)/자바 ORM 표준 JPA 프로그래밍 2020. 10. 5. 16:36
    반응형

    요구 사항

        1) 회원은 상품을 주문할 수 있다.

        2) 주문 시 여러 종류의 상품을 선택할 수 있다.

     

    기능 목록

    회원 기능

    • 회원등록
    • 회원조회 

    상품 기능

    • 상품등록
    • 상품수정
    • 상품조회

    주문 기능

    • 상품주문
    • 주문내역조회
    • 주문취소

     

    도메인 모델 분석

        1) 회원과 주문의 관계

             - 회원은 여러 번 주문할 수 있다. (일대다) 

        2) 주문과 상품의 관계

            - 주문할 때 여러 상품을 선택할 수 있다. 반 대로 같은 상품도 여러 번 주문될 수 있다. 주문상품 이라는 모델 을 만들어서 다대다 관계를 일다대, 다대일 관계로 풀어냄

     

     

    테이블 설계

     

    엔티티 설계와 매핑

     

    데이터 중심 설계의 문제점

        1) 위의 방식은 객체 설계를 테이블 설계에 맞춘 방식

        2) 테이블의 외래키를 객체에 그대로 가져옴

        3) 객체 그래프 탐색이 불가능

        4) 참조가 없으므로 UML도 잘못됨

     

    코드

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

     

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

     

    @Entity
    @Table(name = "ORDERS")
    public class Order {
    
    	@Id
    	@GeneratedValue
    	@Column(name="ORDER_ID")
    	private Long id;
    
    	@Column(name="MEMBER_ID")
    	private Long memberId;
    
    	private LocalDateTime orderDate;
    
    	@Enumerated(EnumType.STRING)
    	private OderStatus status;
        
        Getter(), Setter() ...
    }

     

    public enum OderStatus {
    	ORDER, CANCEL
    }

     

    @Entity
    public class Item {
    	@Id
    	@GeneratedValue
    	@Column(name="ITEM_ID")
    	private Long id;
    
    	private String name;
    	private int price;
    	private int stockQuantity;
        
        Getter(), Setter()
    }

     

    @Entity
    public class OderItem {
    	@Id
    	@GeneratedValue
    	@Column(name = "ORDER_ITEM_ID")
    	private Long id;
    
    	@Column(name = "ORDER_ID")
    	private Long orderId;
    
    	@Column(name = "ITEM_ID")
    	private Long itemId;
    
    	private int orderPrice;
    
    	private int count;
        
        Getter(), Setter()...
    }  
    반응형
Designed by Tistory.