[Spring Boot] 데이터 저장할 때, object references an unsaved transient instance - save the transient instance before flushing 에러

MyungHwan Kim·2022년 10월 17일
2

ERROR

목록 보기
3/3
post-thumbnail

에러 페이지

org.hibernate.transientpropertyvalueexception: object references an unsaved transient instance - save the transient instance before flushing : com.service.zerobnb.web.payment.domain.payment.reservation -> com.service.zerobnb.web.reservation.domain.reservation; nested exception is java.lang.illegalstateexception: org.hibernate.transientpropertyvalueexception: object references an unsaved transient instance - save the transient instance before flushing

원인

  • @OneToOne 관계에서 부모 객체인 Reservation에서 자식 객체인 Payment까지 한 번에 저장하려다 발생한 에러
Payment payment = Payment.from(form, room);

Reservation reservation = Reservation.from(form, guest, room, payment);
payment.setReservation(reservation);
paymentRepository.save(payment);  // payment 저장
reservationRepository.save(reservation);  // reservation 저장

해결 방안

  • Reservation 객체와 Payment 객체에 Cascade.ALL 을 추가하여 해결.

  • 부모 객체인 Reservation 이 저장될 때 자식 객체인 Payment 도 함께 저장될 수 있도록 함.

  • Reservation 객체

  • Payment 객체

Payment payment = Payment.from(form, room);

Reservation reservation = Reservation.from(form, guest, room, payment);
payment.setReservation(reservation);
reservationRepository.save(reservation);  // reservation 저장
  • 위처럼 paymentRepository.save(payment); 부분의 코드는 제거하여 사용.
profile
Back-end 개발자가 되기 위한 개발 노트(Java)

0개의 댓글