@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

+ Recent posts