도메인 분석 설계 https://www.inflearn.com/course/스프링부트-JPA-활용-1/dashboard
Member - Order
Member과 Order는 양방향 일대다 다대일 관계이다.
@JoinColumn(name="member_id")로 Order가 member의 member_id를 FK로 가진다.
Member는 Order를 단순 조회용으로 사용하고 Order의 값을 바꿔야 이 연관관계에서 데이터가 바뀌며, Order를 생성할 때 Member가 필요하기 때문에 연관관계의 주인은 Order가 된다.
* 보통 일대다 관계에서는 '다'에 해당하는 쪽이 주인을 가져간다.
* FK에 가까운 쪽이 주인이 된다.
Order - OrderItem도 비슷하다.
OrderItem - Item
단방향 다대일 관계이다.
OrderItem이 Item의 item_id를 FK로 가져간다.
Item은 Order를 갖고있을 필요가 없기 때문에 단방향이다.
여기까지 해서 데이터가 들어왔을 때 예상 구조를 그려보면 아래와 같이 그려진다.
Item
Item Type을 Album, Book, Movie로 나누고 각각은 Item을 상속 받는다.
상속은 Single table에 몰아넣기 때문에 DB Table을 확인해보면 Item Table에 artist, etc, author, isbn, director, actor이 들어가있다.
Category
부모, 자식 카테고리를 위해서 자기자신을 참조하도록 셀프로 양방향 매핑했다.
Item - Category
양방향 다대다 관계이다.
@JoinTable을 이요해 별도의 Table을 만들어 관리한다. category_id와 item_id를 매핑한다.
joinColumns는 현재 Entity(Category)를 참조하는 FK이고, inverseJoinColumns는 반대 방향 Entity(Item)을 참조하는 FK이다.
'springboot' 카테고리의 다른 글
[springboot-thymeleaf] 쇼핑몰 상품 찜 기능 구현하기 (0) | 2022.04.21 |
---|---|
[thymeleaf] form 태그 아래 submit이 여러 개일 때 (0) | 2022.04.19 |
[스프링 핵심 원리] @Autowired @Qualifier @Primary (0) | 2022.03.09 |
[vue.js-springboot] todoApp (0) | 2022.03.05 |
[스프링 핵심 원리] 스프링으로 전환하기 (0) | 2022.03.04 |