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

sy k님의 프로필 이미지

작성한 질문수

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

엔티티 클래스 개발2

('07:50) 실행시 `BeanCreationException` 에러 관련

해결된 질문

작성

·

4.2K

0

  • 강의 기준 ('07:50) 스프링 부트 실행시, BeanCreationException오류가 발생합니다. 아래는 콘솔창의 에러문 입니다

  • 에러 메세지를 보면 Category 와 Item 클래스간 매핑이 되지 않았다 라는 식의 메세지가 확인됩니다

  • 코드 상으로는 연관관계 매핑이 되어 있는데 어떤 이유인지 모르겠습니다 ㅠ

콘솔-오류 메시지

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Invocation of init method failed; nested exception is org.hibernate.AnnotationException: Use of @OneToMany or @ManyToMany targeting an unmapped class: com.jpabook.jpashop.domain.item.Item.categories[jdk.jfr.Category]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1804) ~[spring-beans-5.3.23.jar:5.3.23]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:620) ~[spring-beans-5.3.23.jar:5.3.23]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) ~[spring-beans-5.3.23.jar:5.3.23]
	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.23.jar:5.3.23]

 

Category

@Entity
@Getter
@Setter
public class Category {
    @Id
    @GeneratedValue
    @Column(name = "category_id")
    private Long id;

    private String name;

    @ManyToMany
    @JoinTable(name = "category_item",
        joinColumns = @JoinColumn(name = "category_id"),
        inverseJoinColumns = @JoinColumn(name = "item_id"))
    private List<Item> items = new ArrayList<>();

    @ManyToOne
    @JoinColumn(name = "parent_id")
    private Category parent;

    @OneToMany(mappedBy = "parent")
    private List<Category> child = new ArrayList<>();
}

 

Item

@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "dType")
@Getter @Setter
public abstract class Item {
    @Id @GeneratedValue
    private Long id;

    private String name;

    private int price;

    private int stockQuantity;

    @ManyToMany(mappedBy = "items")
    private List<Category> categories = new ArrayList<>();
}

답변 3

1

안녕하세요 지나가는 1인 입니다.

저도 비슷한 문제가 생겨서 맨땅에 해딩을 하다가 겨우 해결을 했는데 정확한 답변이 될지는 모르겠으나 혹시나 도움이 될까 하여 이렇게 몇자 끄적입니다.

Item class 부분에서

@Id @GeneratedValue @Column(name = "item_id") private Long id;

@Column(name = "item_id") <--- 요부분이 빠진 것 같습니다.

혹시나 님께 도움이 될까 하여 몇자 끄적였습니다. ^^;;

sy k님의 프로필 이미지
sy k
질문자

Eddie 님 답변 감사합니다!

콜럼 네임을 추가했는데도 같은 에러가 뜨네요 ㅠㅠ 뭐가 맵핑이 안되는것 같은데 이유를 모르겠습니다 ㅠㅎㅎ

0

image

코드 확인해보았습니다. Item클래스의 category Import를 보시면, 강의에서 생성한 카테고리가 아니네요 ^^

임포트를 수정하고 확인해주세요 :)

sy k님의 프로필 이미지
sy k
질문자

아... 클래스 경로 복사해서 옮겼더니 코드에 저런게 나와서 지웠는데 임포트에도 그대로 들어가는군요 ㅠㅠ

감사합니다 ㅠㅠ

0

안녕하세요. sy k님, 공식 서포터즈 OMG입니다.

.
Eddie님의 답변을 참고해주시고, 해결이 안될 경우 댓글남겨주세요:)

.
감사합니다.

sy k님의 프로필 이미지
sy k
질문자

@Column(name = "item_id") 추가 이후에도 동일한 에러가 발생합니다 ㅠㅠ

기존 생성된 테이블을 삭제하시고, 다시 실행해보시겠어요?

이전에 생성된 테이블 속성이 남아 있어서 해결이 안된 걸 수도 있을 것 같아요.

삭제해도 동일한 문제가 발생할 경우 댓글남겨주세요

sy k님의 프로필 이미지
sy k
질문자

H2 에서 테이블 삭제후 재실행 해보았지만 동일한 오류가 발생합니다 ㅠㅠ

코드를 확인해봐야 알 것 같습니다.

전체 프로젝트를 압축해서 구글 드라이브로 공유해서 링크를 남겨주세요.
구글 드라이브 업로드 방법은 다음을 참고해주세요.

https://bit.ly/3fX6ygx

ㅁ 업로드 시 권한 문제 꼭 확인해주세요
공유 기본 설정은 비공개로 되어 있어 업로드 한 본인 계정만 접근이 가능합니다.

본인 계정이 아닌 링크를 통한 타 계정 접근이 가능한지 확인하는 방법은 업로드 한 구글 계정을 로그아웃하고 링크를 접속하여 "액세스 권한 요청 화면"이 출력되는지 확인을 해주세요.

감사합니다

sy k님의 프로필 이미지

작성한 질문수

질문하기