자바에서 JPA의 구현체인 Hibernate 설정을 해준 후에 마주했던 에러다.
Error creating bean with name 'Repository' defined in 패키지.Repository defined in @EnableJpaRepositories declared on JpaRepositoriesRegistrar.EnableJpaRepositoriesConfiguration:
Cannot resolve reference to bean 'jpaMappingContext' while setting bean property 'mappingContext'; nested exception is org.springframework.beans.factory.BeanCreationException:
Error creating bean with name 'jpaMappingContext':
Invocation of init method failed; nested exception is org.hibernate.AnnotationException:
Attribute [패키지.엔티티] was annotated as enumerated,
but its java type is not an enum [java.lang.String ...
오늘은 이 에러에 대해 글쓰고자 한다.
글을 읽다 보면 눈에 띄는 단어가 하나 있다.
'Bean'
빈(Bean)은 스프링에서 애플리케이션의 핵심을 이루는 객체이며, Spring IoC(Inversion of Control) 컨테이너에 의해 인스턴스화, 관리,생성된다.
개발자가 인스턴스를 생성하거나 호출, 삭제하면 빈이 인스턴스가 되는거고 IoC라는 컨테이너가 열심히 관리를 해준다.
직관적으로 설명하자면,
어플리케이션이 땅! 하고 켜지면 인스턴스 빈들이 뿅 나타나는 거고 (참고로) 어노테이션이라는 아이가(@ 이걸 달고 있는 아이들) 버스가 돼서 빈들을 버스에 태워 컨테이너에 데려다준다.
그러면 컨테이너가 관리를 시작한다.
에러 내용을 보면 '빈을 생성할 수 없다'라고 이야기하고 있다.
어플리케이션을 작동했을 때 초기에 진행되어야 하는 일이 안됐다는 건 JPA 초기 설정이 잘못되었다는 것이다.
결국 이 긴 에러를 분석하자면 아래와 같다.
초기 설정 잘못되었으니 다시 한 번 살펴보삼
이 에러를 마주한다면 엔티티와 레파지토리 쪽을 살펴보길 바란다.
1. 엔티티를 정확히 입력했는가
2. 릴레이션 조인을 상황에 맞게 맺었는가
3. 엔티티 클래스와 연결된 클래스들이나 어노테이션이 적절하게 배치되었는가
4. 그 외...
나의 경우에는 3번이었는데, Enum 타입 설정을 잘못해서 이 에러를 어제 마주했다. 타입을 수정했더니 잘 작동하더라!!
문의 & 오류 지적 언제나 환영합니다 :)