Hibernate Single_Table持久性实体没有在子类上定义的主键属性

时间:2011-10-25 01:35:29

标签: hibernate inheritance jpa primary-key single-table-inheritance

晚上好。我正在尝试使用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并花了很多时间扒过谷歌,看不出我错过了什么。

预先感谢您的协助!

1 个答案:

答案 0 :(得分:3)

您的问题与继承无关。出现此错误,因为您在setter中有持久性映射注释。那些注释应该在字段或getter中。在这种情况下,只需将注释从setId移动到getId(如果您有其他setter的注释,也可以移动它们)。

JPA规范:

  

使用基于属性的访问时,对象/关系映射   实体类的注释注释getter属性   访问器[7] ....
  [7]这些注释不得应用于setter方法。