김영한님의 인프런 강의와 PDF를 바탕으로 정리하였습니다.
https://www.inflearn.com/courses?s=%EA%B9%80%EC%98%81%ED%95%9C
아래와 같은 요구사항이 추가되었습니다.
• 회원은 상품을 주문할 수 있다.
• 주문 시 여러 종류의 상품을 선택할 수 있다.
위의 설계는 관계형 DB에 의존적임을 알 수 있습니다. 만약 객체 지향의 세상에서는 예를 들어 Order테이블에 MemberId가 아닌 Member를 참조값으로 가지고 있을 것입니다.
일단은 관계형DB 의존적으로 설계를 하고, 엔티티 클래스들을 만들겠습니다.
후에 하나씩 객체지향 적으로 수정하겠습니다.
Member
Order
OrderItem
Item
Order의 주문상태를 위한 OrderStatus enum
위와 같이 만들고 실행하면 테이블들이 만들어집니다.
근데 이처럼 관계형 DB에 의존적인 설계는 문제가 있습니다.
Order테이블에서 주문한 멤버를 찾기 위한 아래의 코드를 보겠습니다.
위에서 보이듯이 멤버를 찾기 위해서는 많은 단계를 거쳐야하고, 하나의 주문에 대한 멤버를 찾기 위해 쿼리가 2번 사용됩니다.
(주문을 조회하고, 주문의 fk인 member_id를 조회하고, 그 member_id로 멤버를 찾고...)
우리가 원하는 방식은 아래처럼 객체 지향적인 방식입니다.
Order테이블에서 order객체를 찾아오면 자바 컬렉션처럼 그 객체에서 member를 찾고 싶은 것입니다.
하지만 지금처럼 관계형 DB에 의존적인 설계로는 불가능합니다.
이제 필요한 것은 연관관계 매핑입니다.
'JPA > JPA원리' 카테고리의 다른 글
11 JPA 양방향 연관관계와 연관관계의 주인 (0) | 2021.07.07 |
---|---|
10 JPA 단방향 연결관계 (객체적 설계도입) (0) | 2021.07.05 |
8 JPA 기본키 매핑 (0) | 2021.07.05 |
7 JPA 필드와 칼럼 매핑 (0) | 2021.07.04 |
6 JPA 객체와 테이블 매핑, 데이터베이스 스키마 자동 생성 (0) | 2021.07.04 |