1. 문제 상황

Order를 새로 만들 때, orderCoffee를 cascade로 연결하여 함께 자동 생성되도록 코드를 작성하였는데 다음과 같은 예외가 발생하였음

org.hibernate.PersistentObjectException: detached entity passed to persist

2. 문제 원인(파악 실패)

문제를 파악하기 위해 Member, Order, Coffee, OrderCoffee객체와 OrderService의 createOrder()메서드를 확인하였지만 오류를 찾을 수 없었음

3. 문제 해결

문제는 생각지 못한 곳에 있었음.

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를 지정해 주면 안 된다 함