Spring data jpa 사용 중 @OneToMany 어노테이션 사용 중 FK로 사용하는 객체가 저장되기 전에 해당 객체를 사용해 FK를 구성하려다 오류가 발생하였다.
public class Order {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long orderId;
private String name;
@OneToMany
private List<OrderProduct> productIds = new ArrayList<>();
public Order createOrder(OrderRequestDto orderRequestDto) {
return Order.builder()
.name(orderRequestDto.getName())
.build();
}
public OrderResponseDto toResponseDto() {
List<Long> productIds = new ArrayList<>();
for(OrderProduct product: this.getProductIds()) {
productIds.add(product.getId());
}
return OrderResponseDto.builder()
.orderId(this.orderId)
.productIds(productIds)
.build();
}
public void addOrderProduct(OrderProduct orderProduct) {
this.productIds.add(orderProduct);
}
}
public class OrderProduct {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne(fetch = FetchType.LAZY)
private Order order;
private Long productId;
}
Long productId = newOrderRequestDto.getProductId();
OrderProduct orderProduct = OrderProduct.builder()
.order(order)
.productId(productId)
.build();
orderProductRepository.save(orderProduct); // 이 코드를 삭제 시 오류 발생!
order.addOrderProduct(orderProduct);
위의 주석이 적힌 부분의 코드를 추가하여 오류를 해결할 수 있었다.