엔티티 클래스 개발1
Last updated
Last updated
일단 각 테이블(엔티티)들을 클래스로 생성 PK=>@Column(name="PrimaryKeyName") PK이름은 관례상 테이블명_id로 하거나 테이블명id로 한다. 중요한 건 일관성이다. 엔티티나 객체는 이름이 있지만 테이블은 타입이 없기 때문에 구분이 어렵다. 테이블명과 함께 명시해주는 것이 좋다!
각 테이블에 속하는 필드 데이터 구현
양방향 관계 확인 후 매핑⭐️⭐️⭐️⭐️⭐️ ① 테이블 간 연관관계 확인(1:N, N:1 등)
② FK에 따라 연관관계 주인 정하기(FK가 있는 쪽 = 주인) 주인쪽은 @JoinColumn(name="상대테이블의 PK이름")
반대쪽은 @OneToMany(mappedBy="상대 FK 필드 데이터변수명")
양방향 관계에서 연관관계 주인 정하기
MEMBER & ORDERS
객체는 변경 포인트가 2개인데 테이블은 하나만 변경하기 때문에 둘 중 하나를 주인이라는 개념으로 정해야한다! 예를 들어 ORDERS나 MEMBER 중에서 A라는 것이 바뀔 때 FK(Foreign Key)를 바꾼다.
ORDERS 테이블 안에 MEMBER_ID(FK)가 있기 때문에 MEMBER와 ORDERS 중에서 ORDERS가 연관관계 주인이 된다. 그렇지 않으면 MEMBER의 데이터를 변경했는데 ORDERS의 뭔가가 바뀌어버린다. 그래서 ORDERS 테이블의 칼럼을 바꾸면 현재 테이블의 데이터를 수정하니까 현재 테이블 칼럼이 바뀌는구나 생각한다. =>회원에 의해 주문이 바뀌기 때문에 회원 테이블의 주문이 연관관계 주인이 될 것 같지만 실무는 그 반대로 회원이 주문을 참조하지 않고, 주문이 회원을 참조하는 것이라고 한다.
2. ORDERS & ORDER_ITEM
하나의 주문에 여러개의 주문 상품이 있다! 따라서 ORDERS와 ORDERITEM은 일대다 관계다! => FK는 "다" 쪽에 있다! ORDER_ITEM 테이블에 Order_Id가 FK로 있으므로 주문 상품(OrderItem)이 연관관계 주인이 된다!
양방향 관계 구현 1:다 에서 다 쪽의 FK가 있으므로 반대편인 1쪽에 상응하는 필드는 @OneToMany(mappedBy = "name") 로 설정. 여기서 name은 상대 테이블에 FK 필드 변수이름이다!(여기서 name은 order가 된다. 주문상품 테이블 내에서 "상품" 변수 명 private Order order)
상속관계 매핑 전략을 지정해야한다. 싱글테이블 전략을 사용하기 때문에 부모 테이블에 @Inheritance(strategy = InheritanceeType.xxx) 지정 필요. InheritanceType SINGLETABLE : 하나의 테이블에 다 넣는 것 TABLEPER_CLASS : 클래스마다 하나의 테이블로 설정.
1:1 관계 FK 위치 JPA에서는 FK를 어느 위치에 두든 상관이 없다. 강사님 개인 추천은 접근을 많이 하는 테이블에 FK를 두는 것이다. 주문:배달 = 1:1이지만 주문을 먼저 보고 배달을 보기 때문에 주문(Order) 테이블의 Deleivery_Id에 FK를 둔다. 주문에도 배달이 있고, 배달에도 주문이 있다! 연관관계 주인을 정해보자. 그러면 FK와 가까이 있는 주문 테이블이 연관관계 주인이 된다!