반응형
250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 인터넷프로토콜
- 객체리터럴
- 코딩
- EntityFramework
- 비주얼스튜디오
- 인프런자바스크립트
- 콜백함수
- 인프런강좌
- 객체의비교
- 자바스크립트틱택토
- 자바스크립트
- 제로초
- 인프런
- slice
- 인프런강의
- 이벤트리스너
- HTTP
- 인프런인강
- c#
- sort
- 고차함수
- .NET
- 자바스크립트파라미터
- 자바스크립트객체리터럴
- 인프런무료강좌
- 자바스크립트recude
- 틱택토구현
- NPM
- Blazor
- 자바스크립트함수
Archives
- Today
- Total
샐님은 개발중
#5. 영속성 전이 본문
728x90
반응형
영속성 전이 : casecade이며 엔티티의 상태를 변경할 때 해당 엔티티와 연관된 엔티티의 상태 변화 전파하는 옵션이다.
이때 부모는 One에 해당하고 자식은 Many에 해당한다.
영속성 전이 옵션은 단일 엔티티에 완전히 종속적이고 부모 엔티티와 자식 엔티티의 라이프 사이클이 유사할때 cascade 옵션을 활용하길 권장.
Order - OrderItem
1. 주문 엔티티 저장하기 위한 OrderRepository 생성
package won.shop.Repository;
import org.springframework.data.jpa.repository.JpaRepository;
import won.shop.domain.Order;
public interface OrderRepository extends JpaRepository<Order,Long> {
}
2.@OneToMany 어노테이션에 casecade 옵션 추가
@Getter
@Setter
@Entity
@Table(name="orders")
public class Order {
,,,
@OneToMany(mappedBy = "order",cascade = CascadeType.ALL)
,,,
}
3. 실제로 주문 엔티티를 저장할 때 영속성 전이, 즉 order저장시에 orderItem 데이터가 함께 저장되는지 테스트 하기
package won.shop.entity;
import jakarta.persistence.EntityManager;
import jakarta.persistence.EntityNotFoundException;
import jakarta.persistence.PersistenceContext;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.DisplayName;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.transaction.annotation.Transactional;
import won.shop.Repository.ItemRepository;
import won.shop.Repository.OrderRepository;
import won.shop.constant.ItemSellStatus;
import won.shop.domain.*;
import java.time.LocalDateTime;
import static org.junit.Assert.assertEquals;
@SpringBootTest
@Transactional
public class OrderTest {
@Autowired
OrderRepository orderRepository;
@Autowired
ItemRepository itemRepository;
@PersistenceContext
EntityManager em;
public Item createItem(){
Item item = new Item();
item.setItemNm("테스트 상품");
item.setPrice(10000);
item.setItemDetail("상세설명");
item.setItemSellStatus(ItemSellStatus.SELL);
item.setStockNumber(100);
return item;
}
@Test
@DisplayName("영속성 전이 테스트")
public void cascadeTest() {
Order order = new Order();
for(int i=0;i<3;i++){
Item item = this.createItem();
itemRepository.save(item);
OrderItem orderItem = new OrderItem();
orderItem.setItem(item);
orderItem.setCount(10);
orderItem.setOrderPrice(1000);
orderItem.setOrder(order);
order.getOrderItems().add(orderItem);
}
orderRepository.saveAndFlush(order);
em.clear();
Order savedOrder = orderRepository.findById(order.getId())
.orElseThrow(EntityNotFoundException::new);
assertEquals(3, savedOrder.getOrderItems().size());
}
}
728x90
반응형
'포토폴리오 > Spring-Boot,JPA - 쇼핑몰사이트 v2' 카테고리의 다른 글
#7. Auditing 엔티티 공통 속성 공통화 (0) | 2023.08.04 |
---|---|
#6. 고아 객체 제거 와 지연 로딩 (0) | 2023.08.04 |
#4. 연관 관계 매핑 (0) | 2023.08.04 |
#3. 스프링 시큐리티를 활용한 로그인/회원가입 (2) (0) | 2023.08.03 |
#2. 스프링 시큐리티를 활용한 로그인/회원가입 (1) (0) | 2023.08.03 |