Order를 새로 만들 때, orderCoffee를 cascade로 연결하여 함께 자동 생성되도록 코드를 작성하였는데 다음과 같은 예외가 발생하였음
org.hibernate.PersistentObjectException: detached entity passed to persist
문제를 파악하기 위해 Member, Order, Coffee, OrderCoffee객체와 OrderService의 createOrder()메서드를 확인하였지만 오류를 찾을 수 없었음
문제는 생각지 못한 곳에 있었음.
default Order orderPostDtoToOrder(OrderPostDto orderPostDto){
Order order = new Order();
Member member = new Member();
member.setMemberId(orderPostDto.getMemberId());
orderPostDto.getOrderCoffees().stream()
.map(orderCoffeeDto -> {
OrderCoffee orderCoffee = new OrderCoffee();
orderCoffee.setQuantity(orderCoffeeDto.getQuantity());
Coffee coffee = new Coffee();
coffee.setCoffeeId(orderCoffeeDto.getCoffeeId());
orderCoffee.setOrder(order);
orderCoffee.setCoffee(coffee);
//orderCoffee.setOrderCoffeeId(orderCoffeeDto.getCoffeeId());
return orderCoffee;
}).collect(Collectors.toList());
order.setMember(member);
return order;
}
<문제의 코드는 주석 처리됨>
POST 요청을 보낼 때 이것을 mapper가 Order객체로 변환하는 과정에서, orderCoffee의 Id를 강제로 지정해 주고 있었기 때문에 문제가 발생하였음. orderCoffee의 Id는 cascade로 생성 과정을 위임하였기 때문에 Id를 지정해 주면 안 된다 함