본문 바로가기
Dev/JPA

[JPA] 실습 - 연관관계 매핑 시작

by dev_jsk 2021. 8. 18.
728x90
반응형

이전 실습에 연관관계를 구성해보자.

테이블 및 엔티티 설계

테이블 설계 (좌측) / 엔티티 설계 (우측)

실습

연관관계를 갖는 엔티티

- Member.java

@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;
// 양방향 연관관계 (Member <-> Order)
@OneToMany(mappedBy = "member") // 조회만 가능
private List<Order> orders = new ArrayList<>();
// getter, setter
}

- Order.java

@Entity
@Table(name = "ORDERS")
public class Order {
@Id @GeneratedValue
@Column(name = "ORDER_ID")
private Long id;
// Member와 연관관계 생성, 다대일
@ManyToOne
@JoinColumn(name = "MEMBER_ID")
private Member member;
private LocalDateTime orderDate;
@Enumerated(EnumType.STRING)
private OrderStatus status;
// 양방향 연관관계 (Order <-> OrderItem)
@OneToMany(mappedBy = "order")
private List<OrderItem> orderItems = new ArrayList<>();
// 연관관계 편의 메소드 (Order <-> OrderItem)
public void addOrderItem(OrderItem orderItem) {
orderItems.add(orderItem);
orderItem.setOrder(this);
}
// getter, setter
}

- OrderItem.java

@Entity
public class OrderItem {
@Id @GeneratedValue
@Column(name = "ORDER_ITEM_ID")
private Long id;
// Order와 연관관계 생성, 다대일
@ManyToOne
@JoinColumn(name = "ORDER_ID")
private Order order;
// Item과 연관관계 생성, 다대일
@ManyToOne
@JoinColumn(name = "ITEM_ID")
private Item item;
private int orderPrice;
private int count;
// getter, setter
}

- Item.java 는 이전 실습과 동일

Main

- JpaMain.java

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 = new Order();
// 1. 연관관계 편의 메소드 이용
// order.addOrderItem(new OrderItem());
em.persist(order);
// 2. 양방향 연관관계 이용
OrderItem orderItem = new OrderItem();
orderItem.setOrder(order);
em.persist(orderItem);
tx.commit();
} catch (Exception e) {
tx.rollback();
} finally {
em.close();
}
emf.close();
}
}

양방향 연관관계 관련

  • 양방향 연관관계가 아니어도 애플리케이션 개발에 문제 없다.
  • 편의를 위해 양방향 연관관계(조회)를 만드는 것이다.
  • 실무에서 JPQL을 복잡하게 사용하기 때문에 편하게 작성하기 위해 양방향 연관관계를 사용한다.
  • 비지니스 로직 상 필요할 경우에만 양방향 연관관계를 사용하는 것이 좋다.
728x90
반응형

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

[JPA] 실습 - 다양한 연관관계 매핑  (0) 2021.08.23
[JPA] 다양한 연관관계 매핑  (0) 2021.08.23
[JPA] 연관관계 매핑 기초  (0) 2021.08.12
[JPA] 실습 - 요구사항 분석과 기본 매핑  (0) 2021.08.03
[JPA] 엔티티 매핑  (0) 2021.08.02

댓글