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

흑후추님의 프로필 이미지

작성한 질문수

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

엔티티 클래스 개발1

BeanCreationException 질문드립니다.

해결된 질문

작성

·

280

0

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: jpabook.jpashop.domain.item.Item.categories[jpabook.jpashop.domain.Category]

이런 에러가 발생합니다.

코드 첨부합니다.

해당 부분을 지우면 문제없이 돌아가요..

 

package jpabook.jpashop.domain;

import jpabook.jpashop.domain.item.Item;
import lombok.Getter;
import lombok.Setter;

import javax.persistence.*;
import java.util.ArrayList;
import java.util.List;

@Embeddable
@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(fetch = FetchType.LAZY)
@JoinColumn(name = "parent_id")
private Category parent;

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

public void addChildCategory(Category child) {
this.child.add(child);
child.setParent(this);
}

protected Category(){}

}
package jpabook.jpashop.domain.item;

import jpabook.jpashop.domain.Category;
import lombok.Getter;
import lombok.Setter;

import javax.persistence.*;
import java.util.ArrayList;
import java.util.List;

@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "dtype")
@Getter @Setter
public abstract class Item {

@Id
@GeneratedValue
@Column(name = "item_id")
private Long id;
private String name;
private int price;
private int stockQuantity;

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

답변 2

0

흑후추님의 프로필 이미지
흑후추
질문자

감사합니다.. 해결했습니다.

@Entity를 해야하는데 @Embeddable로 입력된게 문제였네요!

 

그리고 첫번째 코드는 수업 자료 PDF에 있는 코드를 그대로 사용한거에요.. 확인 부탁드립니다.

 

 

수업자료를 캡쳐해서 올려주시면 확인해보겠습니다.

흑후추님의 프로필 이미지
흑후추
질문자

25페이지입니다.

제가 올린 코드는 카테고리 클래스 코드였네요.

그 외는 강의와 다르게 작성한 부분이 었어서 발생한 문제이오니 되도록 강의와 동일하게 진행해주세요.

0

안녕하세요. 흑후추님, 공식 서포터즈 OMG입니다.

올리신 코드 내에서 강의와 다르게 작성된 부분이 많네요.

 

private List<Category> categories = new ArrayList<Category>();

 

 protected Category(){}
@Embeddable
@Getter
@Setter
public class Category {

강의를 참고하여 동일하게 진행해주세요.

해결이 안될 경우 댓글남겨주세요

감사합니다.