2

안녕하세요. JPA/Hibernate를 사용하여 클래스 계층 구조를 단일 테이블에 매핑하려고하고 "내 엔터티에 정의 된 기본 키 특성이 없습니다"라는 내 하위 클래스에서 오류를 수신하려고합니다. 클래스는 다음과 같이 정의됩니다.Hibernate Single_Table persistence 하위 클래스에 기본 키 속성이 정의되지 않았다.

@Entity 
@Table(name = "payments") 
@Inheritance (strategy=InheritanceType.SINGLE_TABLE) 
@DiscriminatorColumn(name="creditDebitFlag",discriminatorType=DiscriminatorType.STRING) 
@Veto 
public abstract class Payment implements IPayment, Serializable{ 

private static final long serialVersionUID = 8354755060201271169L; 
public Integer id; 
    ... 

@Override 
@Id 
@GeneratedValue(strategy = GenerationType.IDENTITY) 
@Column(name="id") 
public void setId(Integer id) { 
    this.id = id; 
} 

@Override 
public Integer getId() { 
    return this.id; 
} 
} 
@Entity 
@DiscriminatorValue("C") 
@Veto 
public class CreditPayment extends Payment implements Serializable { 


    private static final long serialVersionUID = 1L; 

public CreditPayment() { 
    super(); 
} 
} 

내가 뭘 잘못하고 있니? Hibernate docs을 읽었으며 Google을 통해 꽤 많은 시간을 보냈으며 내가 놓친 것을 볼 수 없었습니다.

미리 도움을 주셔서 감사합니다.

답변

3

귀하의 문제는 상속과 관련이 없습니다. 이 오류는 setter에 지속성 매핑 주석이 있기 때문에 발생합니다. 이러한 주석은 필드 또는 getter에 있어야합니다. 이 경우 setId에서 getId로 특수 효과를 옮기면됩니다 (다른 세터에 대한 특수 효과가있는 경우 해당 주석도 함께 이동합니다).

JPA 명세 : 속성 - 기반의 접근이 사용되는 경우

은 객체/관계형 매핑 엔티티 클래스 주석 게터 속성 주석 접근 [7] ...
[7] 이러한 주석은 setter 메소드에 적용하면 안됩니다.

+0

그게 전부 였어! 나는 getter에 주석을 설정했다는 것을 맹세 할 수 있었지만, 나는 그것들을 옮겼고 문제는 사라졌다. 고맙습니다! – user599144