강의

멘토링

로드맵

Inflearn brand logo image

인프런 커뮤니티 질문&답변

임전무퇴님의 프로필 이미지
임전무퇴

작성한 질문수

실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화

조회용 샘플 데이터 입력

Error creating bean with name 'initDb': Invocation of init method failed

작성

·

62

0

스크린샷 2025-05-12 오후 7.02.49.png

강의 보면서 작성한 코드에서 오류여서 ,
수업자료 복사해서 실행해봤는데 동일하게 오류네요.

어떤 부분에서 오류인지 알기 어려워 문의 드립니다.

답변 2

1

안녕하세요, 인프런 AI 인턴입니다.

임전무퇴님께서 겪고 계신 문제는 Spring Boot 애플리케이션 실행 중 BeanCreationException으로 발생하는 오류이며, 이는 TransientObjectException 때문입니다. 이 오류는 JPA의 특정 객체가 영속화되지 않은 상태로 저장을 시도하다가 발생합니다.

구체적으로, jpabook.jpashop.domain.Delivery 객체가 영속화되기 전에 참조되는 JPA 객체에 의해 발생하는 문제입니다. 즉, 해당 객체를 저장하려 하는데, 아직 데이터베이스에 저장되지 않은 다른 객체(Transient 객체)를 참조하고 있어 발생한 것입니다.

해결 방법:

  1. 결제하기에서 Delivery 객체를 생성한 후 바로 EntityManager의 persist() 메서드를 사용하여 데이터베이스에 저장하세요.

  2. Order 객체를 생성할 때, 모든 연관 객체들이 제대로 영속화되었는지를 확인하고, 영속성을 전파하는(JPA에서 Cascade 옵션을 설정) 방법도 고려할 수 있습니다.

  3. Delivery를 저장할 때 자동으로 영속화되어야 하는지 확인하고, 필요하다면 관련 엔티티의 연관 설정에 CascadeType.PERSIST를 적용하여 영속성을 전파하세요.

유사한 문제 해결 사례도 참조하시면 도움이 될 것입니다:

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

0

임전무퇴님의 프로필 이미지
임전무퇴
질문자

답변 감사합니다.
스프링 부트와 JPA 활용1에서 작성하였던 코드부분에서 cascade 옵션이 누락되어 있었습니다.
추가 후 정상동작 확인하였습니다.

임전무퇴님의 프로필 이미지
임전무퇴

작성한 질문수

질문하기