강의 질문있습니다.
1161
작성한 질문수 192


앨범 클래스 파일에는 아래와 같은 에러가 나옵니다.(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번째 사진):
“Persistent entity ‘Album’ should have primary key”
이 에러는 Album 엔티티에 기본 키(primary key)가 정의되지 않았다는 의미입니다. JPA 스펙상 모든 @Entity가 되는 클래스는 @Id 어노테이션을 사용해서 기본 키를 명시해야 합니다. 예를 들어 Long 타입의 id 필드를 추가하여 @Id 어노테이션을 붙여주면 됩니다.
@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에 질문을 남겨주세요.
sdk 설정 오류
0
53
2
오탈자 - @Transactional
0
56
1
src/test/resources 테스트 경로 문제
0
50
1
상품 등록후 H2 db 출력 순서 바꿀 수 있나요?
0
64
1
MemberRepositoryTest 실행오류
0
81
1
boot 4.x >>> trasasction rolled back log & p6spy(영한님, 수업 자료 업데이트 해주시면 감사하겠습니다!!)
1
184
2
강의 마지막 QueryDSL 사용 부분 질문있습니다
1
142
2
클라이언트에서 isbn과 author 수정 요청을 한 경우에 대해 질문드립니다.
0
51
1
도메인 모델 패턴 vs 트랜잭션 스크립트 패턴
0
71
1
기본 생성자
0
60
1
h2 DB 연결시 jdbc url 변경 이유가 궁금합니다.
0
103
1
멤버서비스테스트 부분에서 막힙니다.
0
165
4
실무에서도 EntityManager를 이용해서 많이 작업하는 편일까요?
0
116
1
초반에 h2 다운로드 과정 꼭 필요한가요?
0
120
2
자신 필드에도 get으로 접근하는 이유가 있을까요?
0
114
1
24분 27초 연관관계 편의 메서드 위치
0
113
1
단건 주문만 가능하게 한건 의도한 부분이신가요?
0
109
2
빌드 툴, Gradle
0
59
1
h2연결은 된 것 같은데 엔티티 테이블까지 작성 후 확인해보아도 테이블이 안보입니다
0
77
2
Repository에서 EntityManager 주입 방식 차이
0
90
1
롬복과 사용자 정의 setter 메서드
0
73
1
주문 목록 조회 fetch join 질문드립니다
0
82
1
dirty checking 질문드립니다.
0
83
1
동시성 관련 질문입니다
0
75
1





