인프런 커뮤니티 질문&답변
BeanCreationException
작성
·
27
·
수정됨
0
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.
1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)
질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)
[질문 내용]
여기에 질문 내용을 남겨주세요.
안녕하세요 코드를 따라 치는 과정에서 아래와 같이 작성 했더니 BeanCreationException 이 발생하는 것을 확인 할 수 있었습니다.
public void dbInit1(){
Member member = new Member();
member.setName("userA");
member.setAddress(new Address("서울", "1", "111"));
em.persist(member);
Book book = new Book();
book.setName("JPA1 BOOK");
book.setPrice(10000);
book.setStockQuantity(100);
em.persist(book);
Book book2 = new Book();
book.setName("JPA2 BOOK");
book.setPrice(20000);
book.setStockQuantity(100);
// book2.setName("JPA2 BOOK");
// book2.setPrice(20000);
// book2.setStockQuantity(100);
em.persist(book2);
OrderItem orderItem1 = OrderItem.createOrderItem(book, 10000, 1);
OrderItem orderItem2 = OrderItem.createOrderItem(book2, 20000, 2);
Delivery delivery = new Delivery();
delivery.setAddress(member.getAddress());
em.persist(delivery);
Order order = Order.createOrder(member, delivery, orderItem1, orderItem2);
em.persist(order);
}이때 위의 코드에서 주석 처리된 부분처럼 고쳤더니 정상적으로 코드가 실행되는 것을 확인했습니다. 그런데 이게 어떤 문제에서 오류가 발생한건지 정확히 알 수 없어 질문드립니다.
처음에는 book2의 값이 아무것도 없어서 null에 관한 엔터티 제약조건 관련해서 문제가 발생했나 생각해지만 notnull 같은 제약조건이 없었고 Book이 Item과 상속관계이고 싱글 테이블 전략을 사용해서 DTYPE 값이 book2 생성시 자동으로 생성 된다고 기억해서 특별히 값이 비었다고 생기는 오류가 아니라고 생각이 들었습니다. 결론적으로는 정확히 어떤 원인에서 발생한 문제인지 궁금해서 질문 남깁니다.
답변 2
0
안녕하세요, 인프런 AI 인턴입니다.
박준혁님께서 겪고 계신 BeanCreationException은 코드를 살펴보면, 아마도 Book book = new Book();에 해당하는 객체와 Book book2 = new Book(); 객체의 속성 초기화 부분에서 실수로 인한 문제로 추측됩니다.
주석 처리된 부분을 보면, book2 객체의 속성이 전혀 초기화되지 않았습니다. 이는 book2 객체의 속성 값이 초기화되지 않은 채로 em.persist(book2); 코드가 실행됨으로써 발생할 수 있습니다. 초기화가 되지 않은 경우 해당 엔터티의 필드가 null로 설정되고, 이는 종종 예상치 못한 예외를 발생시키곤 합니다.
주석 처리된 코드처럼 book2의 이름과 가격, 재고 수량을 설정해주면 예외가 발생하지 않는 이유는, 해당 필드를 명시적으로 초기화했기 때문입니다. 특히 JPA에서는 특정 필드가 항상 null이 아님을 가정하는 경우가 많으므로, 이러한 초기화를 놓치면 예외가 발생할 수 있습니다.
또한, DTYPE이나 상속 전략과는 직접적인 관련이 없고, em.persist(book2); 시점에 올바르게 초기화된 속성 값을 Book 객체에 설정해주는 것이 중요합니다. 오류가 발생하지 않는 이유는 book2의 속성 값이 주석 해제 후 올바르게 설정되었기 때문이라 추측됩니다.
추가적인 오류 로그가 있다면, 더 구체적으로 문제를 분석하는 데 도움이 될 수 있습니다. 추가적인 질문이 있으시면 언제든지 남겨주세요. 🙂
관련된 도움 링크: 자주 하는 질문






위는 실행 코드이고 아래는 에러 메시지 입니다.
Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled.
2026-01-28T23:49:04.474+09:00 ERROR 2015 --- [ restartedMain] o.s.boot.SpringApplication : Application run failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'initDb': Invocation of init method failed
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:220) ~[spring-beans-7.0.2.jar:7.0.2]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:426) ~[spring-beans-7.0.2.jar:7.0.2]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1809) ~[spring-beans-7.0.2.jar:7.0.2]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:603) ~[spring-beans-7.0.2.jar:7.0.2]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:525) ~[spring-beans-7.0.2.jar:7.0.2]
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:333) ~[spring-beans-7.0.2.jar:7.0.2]
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:371) ~[spring-beans-7.0.2.jar:7.0.2]
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:331) ~[spring-beans-7.0.2.jar:7.0.2]