ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Spring JPA에서 연관관계 맵핑
    소프트웨어 및 프로그래밍/Spring 2025. 1. 11. 01:06

    JPA는 데이터베이스의 테이블 간의 관계를 객체들 간의 관계로 추상화 해준다.

    JPA에서는 @Entity라는 어노테이션을 통해 객체를 하나의 테이블로 형상화할 수 있다. 그런데 테이블간의 관계는 객체간 관계와 동일하지 않기 때문에 연관관계를 이해하고 이를 적용해야 한다. 아래에 아주 간단한 예시를 통해 이러한 연관관계를 이해해 본다.

     

    그림1. ERD

     

    그림1과 같은 ERD가 있다. 

     

    • Order: 주문 정보가 담긴 테이블
    • OrderItem: 주문에 포함된 상품 정보
    • Delivery: 주문의 배송 정보

     

    Order는 OrderItem과 1대 다 관계로 OrderItem이 Order의 id를 FK로 가지고 있다. 즉, OrderItem 측에서 order_id에 대한 조작이 가능한 '주인'이다. 그래서 Order와 OderItem을 JPA에서 표현하면 아래와 같다.

    그림2. OrderItem의 JPA 엔터티

    OrderItem은 자기의 PK인 ID를 소유하고 또한 Order의 FK를 소유하고 있다. 즉, OrderItem은 Order의 변경에 대한 소유권을 가지고 있다. 그렇기 때문에 Order를 선언하고 ERD에서 보이는 것과 같이 @ManyToOne 관계를 설정하고 마지막으로 JoinCloum을 통해 FK가 맵핑되어 있다는 것을 표시한다.

     

     

    그림3. Oder에 대한 JPA 엔터티

     

    반대로 Order에는 그림 3와 같이 설정한다. OrderItem --> Order는 ManyToOne이지만 Order --> OrderItem은 oneToMany 이다. 그리고 orderItems를 선언하고 @oneToMany(mappedBy = "order")를 통해 OrderItems와 연결되어 있음을 표시해준다.

     

     

Designed by Tistory.