실전 예제
요구 사항

회원은 상품을 주문할 수 있다.
주문 시 여러 종류의 상품을 선택할 수 있다.
도메인 설계

회원과 주문
일대다 관계
회원은 여러 번 주문할 수 있다.
주문과 상품
주문할 때 여러 상품을 선택할 수 있다.
같은 상품도 여러번 주문될 수 있다.
다대다 관계를 일대다, 다대일 관계로 풀어낸다.
테이블 설계

Entity 설계와 매핑

보통 처음에는 테이블과 Entity를 똑같이 설계한다. 이렇게 됐을 때의 문제점이 무엇일지 살펴보자.
@Entity
// 인덱스나 length 같은 칼럼 제약 조건은 매핑 애너테이션을 이용해
// 코드에 표시해주는게 좋다. DB를 까보지 않고도 알 수 있기 때문이다.
// 예를 들어 JPQL 짤 때 인덱스가 필요하면 코드만 보고 사용할 수 있다.
public class Member {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "member_id")
private Long id;
private String name;
private String city;
private String street;
private String zipcode;
}
JpaMain
에서는 주문한 회원을 찾기 위해order
조회 후거기서
memberId
를 찾아다시
member
를 조회해야 하는 번거로움이 있다.
객체는 참조로 쭉쭉 찾아가야 하는데 식별자를 통해서 해야 하면 끊겨버린다. 뭔가 객체지향스럽지 않다. 이런 설계는 관계형 DB에 객체를 맞춘 것이다.
데이터 중심 설계의 문제점
테이블의 외래 키를 객체에 그대로 가져온다.
객체 그래프 탐색이 불가능하다.
참조가 없으므로 앞에서 만든 UML도 사실 잘못된 것이다.
Entity 매핑 다이어그램을 보면 id만 있을 뿐 실제로 참조는 다 끊긴다.
이런 문제를 해결하기 위해 연관 관계 매핑을 배울 것이다.
Last updated
Was this helpful?