본문 바로가기

Dev/JPA

RS) 실전예제를 통한 문제점 분석

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