晚上好。我正在尝试使用JPA / Hibernate将类层次结构映射到单个表,并在我的子类上收到错误,指出“实体没有定义主键属性”。这些类定义如下:
@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并花了很多时间扒过谷歌,看不出我错过了什么。
预先感谢您的协助!
答案 0 :(得分:3)
您的问题与继承无关。出现此错误,因为您在setter中有持久性映射注释。那些注释应该在字段或getter中。在这种情况下,只需将注释从setId移动到getId(如果您有其他setter的注释,也可以移动它们)。
JPA规范:
使用基于属性的访问时,对象/关系映射 实体类的注释注释getter属性 访问器[7] ....
[7]这些注释不得应用于setter方法。