Free Lines Arrow
본문 바로가기
DataBase/JPA

[JPA] 연관관계 매핑기초5: 예제

by skahn1215 2021. 8. 4.
728x90
반응형

예제 실습

다음구조를 보고 연관관계 맵핑을 해본다.

 

 

 

 

 

 

 

 

구현1 단방향으로만 구현

Member

@Entity
public class Member {

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

    // 이렇게 규약을 정해주면 알아보기 쉽다.
    @Column(length = 10)
    private String name;
    private String city;
    private String street;
    private String zipCode;
}

 

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;

    //DB 에 저장되는 컬럼 관례는 다음과 같다.
    // ORDER_DATA 또는 order_date
    // 캐멀을 언더스코어로 변경하는 것이 많다.
    private LocalDateTime orderDate;

    @Enumerated(EnumType.STRING)
    private OrderStatus status;

}

 

 

OrderItem

package jpabook.jpashop.domain;

import javax.persistence.*;

@Entity
public class OrderItem {

    @Id @GeneratedValue
    @Column(name = "ORDER_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 count;
}

 

 

Item

@Entity
public class Item {

    @Id @GeneratedValue
    @Column(name = "ITEM_ID")
    private Long id;
    private String name;
    private int price;
    private int stockQuantity;
}

 

 

 

 

 

구현2 양방향 추가

  • Member 와 Order 에 컬렉션을 추가해주면된다.
  • Member 는 orders 를 가지고 있고
  • Order 는 orderItems 를 가지고 있기 때문이다.

 

Member

@Entity
public class Member {

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

    // 이렇게 규약을 정해주면 알아보기 쉽다.
    @Column(length = 10)
    private String name;
    private String city;
    private String street;
    private String zipCode;


    @OneToMany(mappedBy = "member")
    private List<Order> orders = new ArrayList<>();
}

 

 

Order

addOrderItem 를 추가하여 양쪽으로 저장하도록 메서드를 만들었다.

@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")
    private List<OrderItem> orderItems;

    public Member getMember() {
        return member;
    }

    public void setMember(Member member) {
        this.member = member;
    }

    //DB 에 저장되는 컬럼 관례는 다음과 같다.
    // ORDER_DATA 또는 order_date
    // 캐멀을 언더스코어로 변경하는 것이 많다.
    private LocalDateTime orderDate;

    @Enumerated(EnumType.STRING)
    private OrderStatus status;

    public void addOrderItem(OrderItem orderItem) {
        orderItems.add(orderItem);
        orderItem.setOrder(this);
    }
}

 

 

 

 

참고: https://www.inflearn.com/course/ORM-JPA-Basic/lecture/21699?speed=1&tab=curriculum 

 

자바 ORM 표준 JPA 프로그래밍 - 기본편 - 인프런 | 학습 페이지

지식을 나누면 반드시 나에게 돌아옵니다. 인프런을 통해 나의 지식에 가치를 부여하세요....

www.inflearn.com

 

728x90
반응형

댓글