@Entity
@Table(name = "orders") // 테이블명 설정
@Getter @Setter
public class Order {
@Id
@GeneratedValue
@Column(name = "order_id")
private Long id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "member_id") // FK //연관관계 주인
private Member member;
... 생략
//==연관관계 편의 메서드==//
// 컨트롤 하는쪽이 들고있는게 좋다.
// 양방향일 때 사용하면 좋다 - 양쪽에 세팅해야하는 것을 원자적으로 한번에 세팅한다.
public void setMember(Member member) {
this.member = member;
member.getOrders().add(this);
}
// 연관관계 메서드를 사용 안할 경우 - 비지니스 로직에서 아래처럼 처리해줘야 한다. -> 연관관계 메서드로 처리 -> 누락 실수 등을 방지
// Member member = new Member();
// Order order = new Order();
//
// member.getOrders().add(order);
// order.setMember(member);
public void addOrderItem(OrderItem orderItem) {
orderItems.add(orderItem);
orderItem.setOrder(this);
}
public void setDelivery(Delivery delivery) {
this.delivery = delivery;
delivery.setOrder(this);
}
}
코드 주석에 설명 참조.
코드 누락등의 실수 방지
양쪽에 반영해야되는 것을 연관관계 메소드로 한번에 처리.
예시 2)
@Entity
@Getter @Setter
public class Category {
@Id
@GeneratedValue
@Column(name = "category_id")
private Long id;
private String name;
@ManyToMany // 실무에서 안써 쓰지마
@JoinTable(name = "category_item",
joinColumns = @JoinColumn(name = "category_id"),
inverseJoinColumns = @JoinColumn(name = "item_id")) // 중간 테이블 맵핑핑
private List<Item> items = new ArrayList<>();
// 셀프 양방향 entity 처리
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "parent_id")
private Category parent;
@OneToMany(mappedBy = "parent")
private List<Category> child = new ArrayList<>();
//==연관관계 메서드==//
public void addChildCategory(Category child) {
this.child.add(child);
child.setParent(this);
}
}
'프로그래밍 > SpringBoot & JPA Use1' 카테고리의 다른 글
구현(회원, 상품, 주문 도메인 개발) - 도메인 모델 패턴 (0) | 2022.06.19 |
---|---|
애플리케이션 구현 준비 (0) | 2022.06.19 |
casecade (0) | 2022.06.19 |
엔티티 설계시 주의점 (0) | 2022.06.19 |
엔티티 클래스 개발 (0) | 2022.06.19 |