1. orderorderItem에서의 cascade사용

 

a.cascade = CascadeType.ALL 미사용시

public class Order {

.....

@OneToMany(mappedBy = "order", cascade = CascadeType.ALL)

private List<OrderItem> orderItems = new ArrayList<>();



persiste(orderItemA)

persiste(orderItemB)

persiste(orderItemC)

persiste(order) //엔티티당 각각 persist를 호출 해주어야 한다.

}

 

b.cascade = CascadeType.ALL 사용시

public class Order {

.....

@OneToMany(mappedBy = "order", cascade = CascadeType.ALL)

private List<OrderItem> orderItems = new ArrayList<>();



persiste(order) 
//만 사용해주면 된다. cascade는 persiste를 전파한다. 
//orderItem 안에 있는 컬렉션(orderItemA,B,C)들 모두를 호출해준다. 
//CascadeType.All이기 때문에 삭제될 때에도 모두 삭제 된다.
}

설명

-OrderorderItemscascade옵션을 사용함

-orderItems에 데이터를 넣어두고 order를 저장하면 orderorderItems가 같이 저장된다.

 orderItemsjpa에 개수만큼 저장하고, 그다음에 컬렉션에 넣은다음에 order를 또 jpa

 persist를 해서 저장을 해주어야 한다.

 

모르는 단어

*persist

*컬렉션

*persist

 

 

2. orderdelivery에서의 cascade 사용

casacade 설정법

실습

public class order{

.............

@OneToOne(fetch = Lazy, cascade = cascadeType.ALL)
@JoinColumn(name = "delivery_id")
private Delivery delivery;
}

설명

a. cascade 미사용시

-order, delivery 각각 persist를 해주어야 한다.

 

b. cascade 사용시

-order, delivery를 한번에 persist를 한다.

모든엔티티는 기본적으로 persist를 저장하고 싶으면 각자 해주어야 하는데,

delivery 값만 세팅후 orderpersist를 하면 cascade를 활용해서

위에 작성된 코드들을 한번에 persist호출이 된다.

 

 

3. 양방향 연관관계 편의 메서드

 

비즈니스 두 개의 로직 원자적으로 묶는 메서드를 구현한다.

public static void main(String[] args) {

Member member = new Member();

Order order = new Order();

 

member.getOrders().add(order);

order.setMember(member);

 

->양방향 연관관계세팅하려면 ordermember가 있으면

   member가 주문을 하면 member class안에 list order에 넣어주어야 한다.

   양방향에서 값을 넣어주어야

   order.getMember, member.getOrder를 통해

   로직을 통해 왔다갔다하려면 값을 세팅해주어야 한다.

 

실습1

실습2

*핵심적으로 컨트롤 하는 쪽에 메서드를 작성하는 것이 좋다.

 

+ Recent posts