작성
·
2.3K
·
수정됨
0
예제를 구현하다가 부모 엔티티와 자식 엔티티 간의 id 속성에 대해 궁금증이 생겨 문의 드립니다.
보통 엔티티 생성 시 @Id가 있는 필드를 정의하지 않으면 인텔리제이에서 경고문구를 띄워줍니다.
저도 @Entity 사용 시 @Id 컬럼 지정을 반드시 해야 한다고 배웠습니다.
그런데 상속관계 매핑 예제를 구현하다가
부모인 Item 엔티티 클래스와 자식인 Album 엔티티 클래스에서 ,
자식 Album 엔티티 클래스에 오히려 @Id를 지정하니 에러가 발생했습니다.
==> [ org.hibernate.mapping.JoinedSubclass cannot be cast to org.hibernate.mapping.RootClass ]
처음엔 extends를 했으니, @Id 필드가 자식에게 상속되는 건가?.. 싶었는데
private 속성은 상속되지 않잖아요?..
혹시 자식 엔티티에 @id를 설정하면 안돼는 이유를 알 수 있을까요??
[ 부모 Item entity class ]
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
public class Item {
public Item() {
}
@javax.persistence.Id @GeneratedValue
@Column(name = "ITEM_ID")
private Long Id;
private String name;
private int price;
[ 자식 Album entity class ]
@Entity
public class Album extends Item{
public Album() {
}
/* @javax.persistence.Id
@GeneratedValue
@Column(name = "ITEM_ID")
private Long id;*/ // ---- 추가시 에러 발생
private String director;
private String actor;
안녕하세요 궁금한게 있습니다
테이블이력을 남기려고
상속을 쓰면 좋겠다고 생각했습니다.
그리고 상속받은 테이블에 seq 필드 하나를 만들어서 @id를 주고 싶었습니다.
이런 경우는 불가능한거죠??
테이블 상속 관계가 아니니까.
이런 테이블 이력을 남기는 경우는 별도로 필드를 다 적어주어야하나요??
도움 부탁드립니다.
감사합니다.