[Spring Boot] JPA 강의 정리-13 (다양한 연관관계 매핑)-실전예제2

Posted by 김성철

SpringBoot - JPA 강의 정리-13(다양한 연관관계 매핑)

https://github.com/kkimsungchul/study_code/tree/main/jpashop   ## 요구사항  
카테고리와 주문 테이블 추가  

중요

나는 gradle 로 했음, gradle일때는 "persistence.xml" 파일에 생성한 클래스의 정보를 추가해야함  
	=====================================================================  
	<class>com.jpabook.jpashop.domain.Category</class>  
	<class>com.jpabook.jpashop.domain.Delivery</class>  
	=====================================================================  

N:M 관계는 1:N , N:1로

테이블의 N:M 관계는 중간 테이블을 이용해서 1:N , N:1로 변경  
실무에서는 중간 테이블이 단순하지 않음  
@ManyToMany의 제약 : 필드 추가X , 엔티티 테이블 불일치  
실무에서는 @ManyToMany 사용하지말것  

@JoinColumn

name :  
	매핑할 외래 키이름  
	기본값 : 필드명_참조하는테이블의 키본키 컬럼명  
  
referencedColumnName :  
	외래 키가 참조하는 대상 테이블의 컬럼명  
	기본값 : 참조하는 테이블의 기본 키 컬럼명  
  
foreignKey(DDL) :  
	외래 키 제약조건을 직접 지정할 수 있다.  
	이 속성은 테이블을 생성할 때만 사용한다.  
  
@Column : @Column의 속성과 같은애들  
	unique  
	nullable insertable  
	updatable  
	columnDefinition  
	table  

@ManyToOne

optional :  
	false로 설정하면 연관된 엔티티가 항상 있어야 한다  
	기본값 : true  
  
fetch :  
	글로벌 패치 전략을 설정한다  
	기본값 :  
		@ManyToOne = FetchType.EAGER  
		@OneToMany = FetchType.LAZY  
  
cascade : 영속성 전이 기능을 사용한다.  
  
tagerEntity :  
	연관된 엔티티의 타입 정보를 설정한다.  
	이 기능은 거의 사용하지 않는다.  
	컬렉션을 사용해도 제네릭으로 타입 정보를 알수 있다.  

@OneToMany

mappedBy : 연관관계의 주인 필드를 선택한다.  
fetch :  
	글로벌 패치 전략을 설정한다.  
	기본값 :  
		@ManyToOne = FetchType.EAGER  
		@OneToMany = FetchType.LAZY  
  
cascade : 영속성 전이 기능을 사용한다.  
  
tagerEntity :  
	연관된 엔티티의 타입 정보를 설정한다.  
	이 기능은 거의 사용하지 않는다.  
	컬렉션을 사용해도 제네릭으로 타입 정보를 알수 있다.  

테이블과 엔티티 설계

MEMBER  
	MEMBER_ID			Long  
	NAME				String  
	CITY				String  
	STREET				String  
	ZIPCODE				String  
  
ORDERS  
	ORDER_ID			Long  
	MEMBER_ID (FK)		Long  
	ORDERDATE			Date  
	STATUS				OrderStatus  
  
ORDER_ITEM  
	ORDER_ITEM_ID (FK)	Long  
	ORDER_ID (FK)		Long  
	ITEM_ID				Long  
	ORDERPRIC			int  
	COUNT				int  
  
ITEM  
	ITEM_ID				Long  
	NAME				String  
	PRICE				int  
	STOCKQUANTITY		int  
  
DELIVERY  
	DELIVERY_ID			Long  
	ORDER				ORDER  
	CITY				String  
	STREET				String  
	ZIPCODE				String  
	STATUS				DeliveryStatus  
  
CATEGORY  
	CATEGORY_ID			Long  
	NAME				String  
	Items				List  
	PARENT_ID			Long  
	Child				List  
  
CATEGOTY_ITEM  
	CATEGORY_ID  
	ITEM_ID