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로 변경
실무에서는 중간 테이블이 단순하지 않음
@ManyToMany의 제약 : 필드 추가X , 엔티티 테이블 불일치
실무에서는 @ManyToMany 사용하지말것
name :
매핑할 외래 키이름
기본값 : 필드명_참조하는테이블의 키본키 컬럼명
referencedColumnName :
외래 키가 참조하는 대상 테이블의 컬럼명
기본값 : 참조하는 테이블의 기본 키 컬럼명
foreignKey(DDL) :
외래 키 제약조건을 직접 지정할 수 있다.
이 속성은 테이블을 생성할 때만 사용한다.
@Column : @Column의 속성과 같은애들
unique
nullable insertable
updatable
columnDefinition
table
optional :
false로 설정하면 연관된 엔티티가 항상 있어야 한다
기본값 : true
fetch :
글로벌 패치 전략을 설정한다
기본값 :
@ManyToOne = FetchType.EAGER
@OneToMany = FetchType.LAZY
cascade : 영속성 전이 기능을 사용한다.
tagerEntity :
연관된 엔티티의 타입 정보를 설정한다.
이 기능은 거의 사용하지 않는다.
컬렉션을 사용해도 제네릭으로 타입 정보를 알수 있다.
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