@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;
@OneToMany(mappedBy = "order", cascade = CascadeType.ALL) // CascadeType.ALL : delete 할때도 같이 처리해 줌
private List<OrderItem> orderItems = new ArrayList<>();
// casecade 선언 안했을 때 : 엔티티당 각각 persist를 호출해야 한다.
// persist(orderItemA)
// persist(orderItemB)
// persist(orderItemC)
// persist(order)
// casecade 선언 했을 때 : cascade 는 persist를 전파한다. orderItemA,B,C 가 컬랙션에 담겨있으므로 모두 persist 해준다.
// persist(order)
// cascade 선언 : delivery에 값만 설정해 놓고 order만 persist하면 delivery까지 같이 persist 해준다.
@OneToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY) // 하나의 배송정보는 하나의 주문정보를 가진다
@JoinColumn(name = "delivery_id") // FK // 연관관계 주인
private Delivery delivery;
... 생략
}
코드내 주석으로 설명 적어 놓음.
persist를 전파하여 각각 persist 해야 하는 아이들을 한 번에 처리해준다.
casecade.Type = All 은 생성뿐만 아니라 delete까지 한 번에 처리해준다.
아래 포함된 모든 기능을 한번에 처리해주는 듯하다.
'프로그래밍 > SpringBoot & JPA Use1' 카테고리의 다른 글
애플리케이션 구현 준비 (0) | 2022.06.19 |
---|---|
연관관계 (편의) 메서드 (0) | 2022.06.19 |
엔티티 설계시 주의점 (0) | 2022.06.19 |
엔티티 클래스 개발 (0) | 2022.06.19 |
도메인 분석 설계 (0) | 2022.06.19 |