실전 스프링 부트와 JPA활용1 강의를 듣고 공부 목적으로 정리한 내용입니다.
모르는 부분이 많아 공부하면서 적고 있습니다.
JPA 강의 수강 후 수정 예정입니다.
회원
상품
주문
기타 요구사항
주문과 상품 사이는 다대다 관계 이므로 주문 상품이라는 엔티티를 추가하여 일대다, 다대일 관계로 풀어냈다. 주문 상품 테이블은 관계를 풀어내는 역할 뿐 아니라 주문 상품 개수, 가격 등 필드도 가지고 있다.
회원이 주문리스트를 가지고 주문도 멤버를 가지는 양방향 참조 형태는
다대일 양방향 연관 관계 예를 위한 상황이다.
실제로는 멤버 테이블의 주문 리스트는 필요 없다.
오히려 Order가 바뀌었을 때 Member의 주문 리스트를 변경해주어야 하므로 어색한 상황이다.
연관관계 매핑 분석을 보기 전에.. 연관 관계에 대한 사전 지식이 없다면
JPA 연관 관계 한방에 정리
이 글을 읽는 것을 추천한다. 많이 배웠다. 감사합니다.
글에서 기억하면 좋을 것
테이블에서는 외래키 하나로 양쪽 테이블 조인이 가능하므로 단방향, 양방향 나눌 필요가 없다.
그래서 객체에서만 단방향, 양방향이 나뉜다.
양방향 연관 관계의 주인은 무조건 외래키가 있는 곳
일대다에서 무조건 다쪽이 외래키를 갖는다.
회원과 주문
주문상품과 주문
주문상품과 상품
엔티티에는 가급적 Setter를 사용하지 않는다.
모든 연관관계는 지연로딩으로 설정한다!
컬렉션은 필드에서 초기화 하는 것이 NULL 문제에서 안전하다.
하이버네이트는 엔티티를 영속화 할 때, 컬렉션을 감싸서 하이버네이트가 제공하는 내장 컬렉션으로 변경한다.
때문에 임의의 메서드에서 컬렉션을 변경 했다가 하이버네이트 내부 동작에 문제가 발생할 수 있다.