작성
·
830
·
수정됨
0
앨범 클래스 파일에는 아래와 같은 에러가 나옵니다.(3번째 사진)
Persistent entity 'Album' should have primary key
코드입니다.
package jpabook.jpashop.domains.Item;
import jakarta.persistence.*;
import lombok.Getter;
import lombok.Setter;
//import javax.persistence.*;
@Entity
@DiscriminatorValue("A")
@Getter
@Setter
public class Album {
private String artist;
private String etc;
}
OrderItem 클래스 파일에는 아래와 같은 에러가 나옵니다.(2번째 사진)
'Many To One' attribute type should not be 'Item'
코드입니다.
package jpabook.jpashop.domains;
import com.fasterxml.jackson.annotation.JsonIgnore;
import jakarta.persistence.Entity;
import jpabook.jpashop.domains.Item.Item;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import jakarta.persistence.*;
@Entity
@Getter @Setter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class OrderItem {
@Id @GeneratedValue
@Column(name = "order_item_id")
private Long id;
// @ManyToOne(fetch = LAZY)
@ManyToOne
@JoinColumn(name = "item_id")
private Item item;
@JsonIgnore
// @ManyToOne(fetch = LAZY)
@ManyToOne
@JoinColumn(name = "order_id")
private Order order;
// private int orderPrice; //주문 가격
// private int count; //주문 수량
}
카테고리 클래스 파일에는 아래와 같은 에러가 나옵니다.(1번째 사진)
'Many To Many' attribute value type should not be 'Item'
코드입니다.
package jpabook.jpashop.domains;
import jakarta.persistence.*;
import jpabook.jpashop.domains.Item.Item;
import lombok.Getter;
import lombok.Setter;
//import javax.persistence.*;
import java.util.ArrayList;
import java.util.List;
@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(fetch = LAZY)
@ManyToOne
@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);
// }
}
강의를 여러번 들어도 틀린부분은 없는데 에러가 나오는게 이해가 되지 않아 코드 올립니다.
답변 2
0
안녕하세요. zzzzz님
Album의 경우 옆에 extends Item이 들어가야 합니다. 참고로 Book, Movie도 마찬가지 입니다.
@Entity
@DiscriminatorValue("A")
@Getter
@Setter
public class Album extends Item {
private String artist;
private String etc;
}
Item의 경우 다음 코드가 추가되어야 합니다.
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "dtype")
@Getter @Setter
public abstract class Item {
Delivery에는 다음 코드가 추가되어야 합니다.
@Entity
@Getter @Setter
public class Delivery {
감사합니다.
0
안녕하세요, 인프런 AI 인턴입니다.
zzzzz님, JPA 엔티티에서 발생하는 에러들에 대해 질문하신 내용 잘 확인했습니다. 각 엔티티에서 발생하는 에러들을 하나씩 살펴보겠습니다.
Album
클래스 파일 관련 에러 (3번째 사진
):@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
OrderItem
클래스 파일 관련 에러 (2번째 사진
):
”‘Many To One’ attribute type should not be ‘Item’”
이 에러 메시지는 @ManyToOne 관계에서 문제가 있음을 알려주는 것인데요, 보통 이러한 메시지는 IDE가 특정 문제를 감지했을 때 나타납니다. 실제로 Item 엔티티와의 연관 관계 매핑에 문제가 있다면 코드를 확인해야 합니다. 다만, 코드 상에는 명백한 오류가 보이지 않습니다. 해당 에러가 발생하는 정확한 이유를 알려면 Item 클래스의 정의를 확인해봐야 할 것 같습니다.
Category
클래스 파일 관련 에러 (1번째 사진
):
”‘Many To Many’ attribute value type should not be ‘Item’”
이 에러 메시지 또한 IDE가 @ManyToMany 관계에서 예상하지 못한 타입을 감지했을 때 나타나는데, 크로스 테이블을 정의한 joinTable 설정에서 문제가 없어 보입니다. 여기서도 Item 클래스의 정의를 확인해볼 필요가 있습니다. 일반적으로는 @ManyToMany 어노테이션을 사용하는 필드로 다른 엔티티를 참조하는 경우 그 타입은 다른 엔티티 클래스 타입이어야 하는데, 이 부분에서 문제가 없으면 추가적인 문제를 감지하기 위해 전체 프로젝트 빌드를 시도해보는 것이 좋습니다.
전체 코드에 대한 링크도 감사드립니다. 하지만 위에서 언급한 내용들로 문제를 해결하지 못하시면, 강의 Q&A 섹션을 통해 구체적인 오류 메시지와 함께 추가 질문을 올려 주시면 강사님이 더 정확한 답변을 드릴 것입니다.
긴 답변 읽어주셔서 감사합니다. 추가적인 도움이 필요하시면 언제든지 인프런 강의의 Q&A에 질문을 남겨주세요.