본문 바로가기
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

댓글