ORDER 엔티티 작성시에 문제가 되는 코드
@Entity
@Table(name = "ORDERS")
public class Order {
@Id
@GeneratedValue
@Column(name = "ORDER_ID")
private Long id;
@Column(name = "MEMBER_ID")
private Long memberId;
위와같이 ORDER 엔티티에 멤버 ID가 포함되어 있는데 이렇게 될 경우..
메인함수를 불러주는 부분에서..
public class JpaMain {
public static void main(String[] args) {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");
EntityManager em = emf.createEntityManager();
EntityTransaction tx = em.getTransaction();
tx.begin();
try{
Order order = em.find(Order.class, 1L);
Long memberId = order.getMemberId();
Member member = em.find(Member.class, memberId);
// 객체지향 스럽지 않다..
위와같이 Order 엔티티에 접근해서 MemberId를 찾고 또 그것을 가지고 Member 엔티티에서 찾아가야하기 때문에
객체지향 스럽지 않다..
@Entity
@Table(name = "ORDERS")
public class Order {
@Id
@GeneratedValue
@Column(name = "ORDER_ID")
private Long id;
// 이렇게 적는 것이 아닌
// @Column(name = "MEMBER_ID")
// private Long memberId;
// 이렇게 Member 자체를 포함시켜서 작성해야 하는데..
private Member member;
// 이렇게 작성해야 메인함수에서 아래와 같이 바로 찾아올 수 있다.
Member findMember = order.getMember(); // 이렇게 바로 찾을 수 있어야 객체지향 스럽다.
위와 같은 문제점으로 인해 연관관계 매핑에 대해서 알아봐야 한다.
Order에서 Member를 어떻게 할 것이냐..
Id값을 가지는 것이 아니라 진짜 Member를 가지는 방법을 알아야 한다.
데이터 중심 설계의 문제점
- 현재 방식이 객체 설계를 테이블 설계에 맞춘 방식
- 테이블의 외래키를 객체에 그대로 가져옴
- 객체 그래프 탐색이 불가능
- 참조가 없으므로 UML도 잘못됨
'Dev > JPA' 카테고리의 다른 글
RS) 양방향 연관관계와 연관관계의 주인 (0) | 2022.02.06 |
---|---|
RS) 연관관계 매핑 기초 (0) | 2022.02.06 |
RS) 기본키 매핑 (0) | 2022.02.03 |
RS) 필드와 컬럼 매핑 (0) | 2022.02.03 |
RS) 객체 테이블 매핑 (0) | 2022.02.02 |