1. order와 orderItem에서의 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이기 때문에 삭제될 때에도 모두 삭제 된다.
}
설명
-Order에 orderItems에 cascade옵션을 사용함
-orderItems에 데이터를 넣어두고 order를 저장하면 order에 orderItems가 같이 저장된다.
orderItems를 jpa에 개수만큼 저장하고, 그다음에 컬렉션에 넣은다음에 order를 또 jpa에
persist를 해서 저장을 해주어야 한다.
모르는 단어
*persist
*컬렉션
*persist
2. order와 delivery에서의 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 값만 세팅후 order만 persist를 하면 cascade를 활용해서
위에 작성된 코드들을 한번에 persist호출이 된다.
3. 양방향 연관관계 편의 메서드
비즈니스 두 개의 로직 원자적으로 묶는 메서드를 구현한다.
public static void main(String[] args) {
Member member = new Member();
Order order = new Order();
member.getOrders().add(order);
order.setMember(member);
->양방향 연관관계세팅하려면 order랑 member가 있으면
member가 주문을 하면 member class안에 list order에 넣어주어야 한다.
양방향에서 값을 넣어주어야
order.getMember, member.getOrder를 통해
로직을 통해 왔다갔다하려면 값을 세팅해주어야 한다.
실습1
실습2
*핵심적으로 컨트롤 하는 쪽에 메서드를 작성하는 것이 좋다.
'신입개발자로 취업하기까지 > JPA쇼핑몰기능구축' 카테고리의 다른 글
20200526 상품 엔티티 및 리포지터리 개발 (0) | 2020.06.22 |
---|---|
20200525 클래스파일 이름변경후 데이터베이스 연동(문제해결) (0) | 2020.06.22 |
20200524 엔티티설계 및 개발시 주의점_2 (0) | 2020.06.08 |
20200523 엔티티설계 및 개발시 주의점_1 (0) | 2020.06.08 |
20200519 도메인분석설계_엔티티클래스 개발 1-6 (0) | 2020.06.07 |