그러면 실제로 어떻게 쓰이는지 한번 보도록 하자
요구사항 분석
- 회원은 상품을 주문할 수 있다.
- 주문 시 여러 종류의 상품을 선택할 수 있다.
기능 목록
- 회원 기능
- 회원 등록
- 회원 조회
- 상품 기능
- 상품 등록
- 상품 수정
- 상품 조회
- 주문 기능
- 상품 주문
- 주문내역조회
- 주문취소
위와 같은 것을 이제 개발자의 입장에서 class를 만드는 것이랑 DA입장에서 만드는 것은 좀 차이가 있다.
Order테이블에서 이제 Member정보를 꺼내고 싶다면 Order.class안에 Member를 선언할 것이다.
근데 JpaMain.class에서 그러면 어떻게 보이냐?
package jpabook.jpashop.domain;
import javax.persistence.*;
import java.time.LocalDateTime;
@Entity
@Table(name = "ORDERS")
public class Order {
@Id @GeneratedValue
@Column(name = "ORDER_ID")
private Long id;
@Column(name = "MEMBER_ID") // 객체지향 스럽지 못해서 Member class를 변수로 가져옴
private Long memberId;
private LocalDateTime orderDate;
@Enumerated(EnumType.STRING)
private OrderStatus status;
private Member member;
// getter setter 생략...
}
package jpabook.jpashop;
import jpabook.jpashop.domain.Member;
import jpabook.jpashop.domain.Order;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;
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 = em.find(Order.class, 1L);
Long memberId = order.getMemberId();
Member member = em.find(Member.class, memberId);
Member findMember = order.getMember();
tx.commit();
}catch(Exception e){
tx.rollback();
}finally{
//code
em.close();
}
emf.close();
}
private static void printMemberAndTeam(Member member) {
}
}
'Spring' 카테고리의 다른 글
6. 스프링 공부 / 양방향 연관관계와 연관관계의 주인 (0) | 2021.07.15 |
---|---|
5. 스프링 공부 / 2021-07-15 (단방향 연관 관계) (0) | 2021.07.15 |
3. 스프링 공부 / 2021-07-14 (필드와 컬럼 매핑 ~) (0) | 2021.07.14 |
2. 스프링JPA 공부 / 2021-07-13 (준영속 상태) (0) | 2021.07.13 |
1. 스프링 공부 / 2021-07-12 (0) | 2021.07.12 |