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
728x90
반응형
'DataBase > JPA' 카테고리의 다른 글
[JPA] 고급 매핑1: 상속관계 맵핑 (0) | 2021.08.08 |
---|---|
[JPA] 다양한 연관관계 맵핑 (0) | 2021.08.07 |
[JPA] 연관관계 매핑기초4: 정리 (0) | 2021.08.03 |
[JPA] mappedBy (0) | 2021.08.02 |
[JPA] 연관관계 매핑기초3: 양방향 사용시 주의점 (0) | 2021.08.02 |
댓글