해결된 질문
작성
·
420
8
@PostMapping("/order")
public String order(@RequestParam("memberId") Long memberId,
@RequestParam("itemId") Long itemId,
@RequestParam("count") int count) {
// orderService.order(memberId, itemId, count);
// 테스트
Member member = memberRepository.findOne(memberId);
Item item = itemRepository.findOne(itemId);
item.setPrice(88888); //더티체킹이 일어나는 시점은 트랜잭션 종료 지점이라 해당 지점에서는 변경이랑 관련이 없다.
//그래서 트랜잭션이 있는 서비스 메소드 부분을 주석쳐버리면 변경은 일어나지 않는다.
// 얘네는 다 에러
// entityManager.flush();
// memberRepository.save(member);
// itemRepository.save(item);
orderService.order(member, item, count);
return "redirect:/orders";
}
@Transactional```
public Long order(Member member, Item item, int count) {
item.setName("변경된 책 이름");
//배송정보 생성
Delivery delivery = new Delivery();
delivery.setAddress(member.getAddress());
delivery.setStatus(DeliveryStatus.READY);
//주문상품 생성
OrderItem orderItem = OrderItem.createOrderItem(item, item.getPrice(), count);
//주문 생성
Order order = Order.createOrder(member, delivery, orderItem);
//주문 저장
orderRepository.save(order);
return order.getId();
}