본문 바로가기
spring/JPA

[JPA] 연관관계 매핑 기초

by H.초보개발자 2023. 12. 7.
반응형

이 글은 인프런의 김영한 강사님 자바 ORM 표준 JPA 프로그래밍-기본 편 강의 내용을 바탕으로 작성되었습니다.

 

자바 ORM 표준 JPA 프로그래밍 - 기본편 - 인프런 | 강의

JPA 를 공부하고 책을 보며 어려웠던 내용을 위주로 먼저 보았습니다. 옆에서 1:1 과외해주는 것 같이 생생하고 이해 잘되는 설명, 예제(코드)가 너무 좋았습니다. 어느 것 하나 애매함없이 모두

www.inflearn.com

일단 기본적인 테이블 구조는 다음과 같다.

위 테이블을 바탕으로 객체 구조를 변경한다면,

다음 객체 구조를 바탕으로 작성한 Member 객체이다.

@Entity
public class Member {

    @Id
    @GeneratedValue
    @Column(name = "MEMBER_ID")
    private Long id;
    private String name;
    private String city;
    private String street;
    private String zipCode;
    @OneToMany(mappedBy = "MEMBER_ID")
    private List<Order> orders = new ArrayList<>();
}

일단 기본적으로 Getter, Setter는 생략을 했다. Jpa에서 테이블 중심에서 객체 오브젝트를 작성할때 가장 먼저 해야될점은 바로 단방향 매핑부터 작성하는 것이다. 이후에 필요하다면 양방향 매핑 코드를 작성하면 된다. 윗 코드에서는 일단 양방향 매핑으로 작성을 하였고 주인을 MEMBER_ID로 작성하였다.

 

 

다음은 Order 객체이다.

@Entity
@Table(name = "ORDERS")
public class Order {
    @Id
    @GeneratedValue
    @Column(name = "ORDER_ID")
    private Long id;
    @ManyToOne
    @JoinColumn(name="MEMBER_ID")
    private Member member;
    @OneToMany(mappedBy = "ORDER_ID")
    private List<OrderItem> orderItems = new ArrayList<>();
    private LocalDateTime orderDate;
    @Enumerated(EnumType.STRING)
    private OrderStatus status;
}

역시 getter, setter는 생략을 해줬다. 여기 역시 OrderItem과 양방향 매핑을 맺었다. 한개의 주문에 여러가지 item을 갖고 있을수 있기 때문이다. 여기서 매핑의 주인은 ORDER_ID로 진행을 해주었다.

 

또한 MEMBER 객체와 연결이 되어있던 Member 변수에는 @JoinColum 어노테이션을 써서 어떤 컬럼과 조인이 되어있는지 명시를 해줘야 함

 

다음은 OrderItem 객체이다.

@Entity
public class OrderItem {

    @Id
    @GeneratedValue
    @Column(name = "ORDER_ITEM_ID")
    private Long id;

    @ManyToOne
    @JoinColumn(name = "ORDER_ID")
    private Order order;
    
    @ManyToOne
    @JoinColumn(name="ITEM_ID")
    private Item item;
    
    private int orderPrice;
    
    private int cout;
}

여기 또한 Order와 매핑이 되었는지 객체에 조인 컬럼 어노테이션을 써서 명시를 해주고, Item 객체와도 매핑을 해준다.

 

마지막으로 item 테이블이다.

@Entity
public class Item {
    @Id
    @GeneratedValue
    @Column(name = "ITEM_ID")
    private Long id;

    private String name;
    private int price;
    private int stockQuantity;
}

item 테이블에는 굳이 양방향 매핑을 하지 않았다. 사실 대부분의 작업은 단뱡향으로 진행이 가능하고, 그때 그때 필요하면 양방향으로 매핑을 해준다. 즉 꼭 필요한것은 아님!!

 

사실 하면서 점점 jpa에 관해서 맨붕이 오고 있다..어디를 주인으로 해야되는지...아직 명확하게 이해는 되지 않는다...좀더 공부가 필요한듯 하다..

반응형

'spring > JPA' 카테고리의 다른 글

[JPA] 고급매핑  (0) 2023.12.11
[JPA] 다양한 연관관계 매핑  (0) 2023.12.08
[JPA] 엔티티 매핑  (1) 2023.11.09
[JPA] JPA 영속성 관리  (0) 2023.11.07
[JPA] JPA 시작하기  (0) 2023.11.06