이 글은 인프런의 김영한 강사님 자바 ORM 표준 JPA 프로그래밍-기본 편 강의 내용을 바탕으로 작성되었습니다.
일단 기본적인 테이블 구조는 다음과 같다.
위 테이블을 바탕으로 객체 구조를 변경한다면,
다음 객체 구조를 바탕으로 작성한 Member 객체이다.
@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;
@OneToMany(mappedBy = "MEMBER_ID")
private List<Order> orders = new ArrayList<>();
}
일단 기본적으로 Getter, Setter는 생략을 했다. Jpa에서 테이블 중심에서 객체 오브젝트를 작성할때 가장 먼저 해야될점은 바로 단방향 매핑부터 작성하는 것이다. 이후에 필요하다면 양방향 매핑 코드를 작성하면 된다. 윗 코드에서는 일단 양방향 매핑으로 작성을 하였고 주인을 MEMBER_ID로 작성하였다.
다음은 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;
@OneToMany(mappedBy = "ORDER_ID")
private List<OrderItem> orderItems = new ArrayList<>();
private LocalDateTime orderDate;
@Enumerated(EnumType.STRING)
private OrderStatus status;
}
역시 getter, setter는 생략을 해줬다. 여기 역시 OrderItem과 양방향 매핑을 맺었다. 한개의 주문에 여러가지 item을 갖고 있을수 있기 때문이다. 여기서 매핑의 주인은 ORDER_ID로 진행을 해주었다.
또한 MEMBER 객체와 연결이 되어있던 Member 변수에는 @JoinColum 어노테이션을 써서 어떤 컬럼과 조인이 되어있는지 명시를 해줘야 함
다음은 OrderItem 객체이다.
@Entity
public class OrderItem {
@Id
@GeneratedValue
@Column(name = "ORDER_ITEM_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 cout;
}
여기 또한 Order와 매핑이 되었는지 객체에 조인 컬럼 어노테이션을 써서 명시를 해주고, Item 객체와도 매핑을 해준다.
마지막으로 item 테이블이다.
@Entity
public class Item {
@Id
@GeneratedValue
@Column(name = "ITEM_ID")
private Long id;
private String name;
private int price;
private int stockQuantity;
}
item 테이블에는 굳이 양방향 매핑을 하지 않았다. 사실 대부분의 작업은 단뱡향으로 진행이 가능하고, 그때 그때 필요하면 양방향으로 매핑을 해준다. 즉 꼭 필요한것은 아님!!
사실 하면서 점점 jpa에 관해서 맨붕이 오고 있다..어디를 주인으로 해야되는지...아직 명확하게 이해는 되지 않는다...좀더 공부가 필요한듯 하다..
'spring > JPA' 카테고리의 다른 글
[JPA] 고급매핑 (0) | 2023.12.11 |
---|---|
[JPA] 다양한 연관관계 매핑 (0) | 2023.12.08 |
[JPA] 엔티티 매핑 (1) | 2023.11.09 |
[JPA] JPA 영속성 관리 (0) | 2023.11.07 |
[JPA] JPA 시작하기 (0) | 2023.11.06 |