에러 일기
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)
이렇게 양쪽에 서로를 전달하여 저장시켜주면 해결된다.