에러 일기

PersistentObjectException: detached entity passed to persist

재원쓰 2023. 2. 1. 03:50

엔티티 종속에 관한 에러였다.

public class Order {
    @Id
    @GeneratedValue
    private Long id;
    private OrderStatus status;

    @ManyToOne(fetch = LAZY)
    @JoinColumn(name = "member_id")
    private Member member;

    @OneToOne(cascade = CascadeType.ALL, fetch = LAZY)
    @JoinColumn(name = "delivery_id")
    private Delivery delivery;

    @OneToMany(mappedBy = "order")
    private List<OrderItem> orderItemList = new ArrayList<>();

	...
}
public class Delivery {
    @Id
    @GeneratedValue
    private Long id;
    private DeliveryStatus status;

    @Embedded
    private Address address;

    @OneToOne(mappedBy = "delivery", fetch = LAZY)
    private Order order;
	
    ...
}

 

Order와 Delivery가 @OneToOne으로 연관되어있는 상태이다.

new Order를 하며 this.delivery = delivery를 하게되었을 때 이 에러가 발생했다.

이유는 Order에서 cascade = CascadeType.All 을 해놨기 때문에 강한 결합이 필요한 것이다.

강한 결합을 해주기 위해선 delivery 쪽에서 order를 지정해줘야 한다.

this.delivery = delivery
delivery.setOrder(this)

이렇게 양쪽에 서로를 전달하여 저장시켜주면 해결된다.