"인프런 - 실전! 스프링 부트와 JPA 활용1 강의를 듣고 작성한 글 입니다."
www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8-JPA-%ED%99%9C%EC%9A%A9-1#
실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발 - 인프런
실무에 가까운 예제로, 스프링 부트와 JPA를 활용해서 웹 애플리케이션을 설계하고 개발합니다. 이 과정을 통해 스프링 부트와 JPA를 실무에서 어떻게 활용해야 하는지 이해할 수 있습니다. 초급
www.inflearn.com
* Cascade
Order 클래스 내부의 OrderItem 과 같은 컬렉션 필드에서 cascade 옵션을 적용해주면 일일히 OrderItem 의 Entity 를 따로따로 저장할 필요 없이 Order Entity 를 저장할 때 한번에 같이 저장해 줄 수 있다.
예시 :
- cascade 를 사용하지 않는 경우
persist(orderitemsA)
persist(orderitemsB)
persist(orderitemsC)
persist(order) // cascade 를 사용하지 않는 경우 각각 따로 저장해 주어야 한다.
- cascade 를 사용하는 경우
persist(order) // order 를 저장할 때 orderitems 의 변경사항 까지 함께 저장된다.
- Order.java
@OneToMany(mappedBy = "order", cascade = CascadeType.ALL) // cascade 옵션 활용(ALL 로 옵션을 설정할 경우 delete 할 때 마저도 함께 삭제된다.)
private List<OrderItem> orderItems = new ArrayList<>();
@OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumn(name = "delivery_id")
private Delivery delivery;
* 연관관계 편의 메소드
양방향 연관관계 를 세팅하려면 Member 와 Order 의 경우 Member Entity 에서 주문 요청이 들어오면 연관관계의 주인과 상관없이 Order Entity 에 값을 함께 넣어주어야 한다.
아래의 예시 코드를 한번 살펴보자.
Member member = new Member();
Order order = new Order();
member.getOrders().add(order);
order.setMember(member);
위와 같이 양방향 연관관계가 설정되어 있을 경우 정방향, 역방향에 모두 데이터를 저장해 주어야 한다.
그런데 매번 이렇게 양방향으로 데이터를 저장해주는 코드를 작성하기는 귀찮기도 하고, 까먹게 될 수도 있다.
이럴때를 대비해 양방향 연관관계에서 데이터를 저장해주는 메소드를 연관관계 편의 메소드를 작성함으로서 만들어 줄 수 있다.
- Order.java
//== 연관관계 편의 메소드
public void setMember(Member member){
this.member = member;
member.getOrders().add(this);
// 양방향 연관관계 에서 데이터를 저장할 때 정방향,역방향 모두 동시에 데이터를
// 저장해주는 메소드를 연관관계 편의 메소드로서 생성해준다.
}
public void addOrderItem(OrderItem orderItem){
orderItems.add(orderItem);
orderItem.setOrder(this);
}
public void setDelivery(Delivery delivery){
this.delivery = delivery;
delivery.setOrder(this);
}
위와 같이 연관관계 편의 메소드를 작성해주면 위의 예시 코드는 아래와 같이 바뀌게 된다.
Member member = new Member();
Order order = new Order();
order.setMember(member);
'Spring boot' 카테고리의 다른 글
스프링 부트 - 회원 Service 개발 학습내용 (0) | 2021.01.06 |
---|---|
스프링 부트 - 회원 Repository 개발 학습내용 (0) | 2021.01.05 |
스프링 부트 - Entity 설계 시 주의할 점(1) (0) | 2020.12.28 |
스프링 부트 - JPA 와 DB 설정 및 동작확인 - Tip (0) | 2020.12.20 |
스프링 부트 - JPA 와 DB 설정 및 동작확인 (0) | 2020.12.20 |