members = memberService.findMembers(); List items = itemService.findItems(); model.addAttribute("members", members); model.addAttribute("items", items); return "order/orderForm"; } @PostMapping("/order") public String order(@RequestParam("memberId") Long memberId, @RequestParam("itemId") Long itemId, @RequestParam("count") int count) { Long orderId = orderService.order(memberId, itemId, count); return "redirect:/orders"; } }"> members = memberService.findMembers(); List items = itemService.findItems(); model.addAttribute("members", members); model.addAttribute("items", items); return "order/orderForm"; } @PostMapping("/order") public String order(@RequestParam("memberId") Long memberId, @RequestParam("itemId") Long itemId, @RequestParam("count") int count) { Long orderId = orderService.order(memberId, itemId, count); return "redirect:/orders"; } }"> members = memberService.findMembers(); List items = itemService.findItems(); model.addAttribute("members", members); model.addAttribute("items", items); return "order/orderForm"; } @PostMapping("/order") public String order(@RequestParam("memberId") Long memberId, @RequestParam("itemId") Long itemId, @RequestParam("count") int count) { Long orderId = orderService.order(memberId, itemId, count); return "redirect:/orders"; } }">
@Controller
@RequiredArgsConstructor
public class OrderController {

	private final OrderService orderService;

	private final MemberService memberService;

	private final ItemService itemService;

	@GetMapping("/order")
	public String createForm(Model model) {
		List<Member> members = memberService.findMembers();
		List<Item> items = itemService.findItems();

		model.addAttribute("members", members);
		model.addAttribute("items", items);

		return "order/orderForm";
	}

	@PostMapping("/order")
	public String order(@RequestParam("memberId") Long memberId,
						@RequestParam("itemId") Long itemId,
	                    @RequestParam("count") int count) {
		Long orderId = orderService.order(memberId, itemId, count);
		return "redirect:/orders";
	}
}
  • 주로 컨트롤러에서 식별자만 넘기고 비즈니스 서비스에서 엔티티를 찾고 하는 것부터 시작한다.
  • 컨트롤러에서 엔티티를 찾지 말자
  • 트랜잭션 안에서 영속 상태를 만들고 문제를 해결하자
  • 컨트롤러에서 엔티티를 넘기면 트랜잭션이 없기 때문에 서비스에선 준영속 상태가 된다.