2

晚上好。我試圖使用JPA/Hibernate將類層次結構映射到單個表,並在我的子類上收到錯誤,指出「實體沒有定義主鍵屬性」。這些類定義如下:Hibernate Single_Table持久化實體沒有在子類上定義的主鍵屬性

@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,並花費了相當多的時間來瀏覽谷歌,看不到我錯過了什麼。

在此先感謝您的幫助!

回答

3

你的問題與繼承無關。這個錯誤來了,因爲你在setter中有持久性映射註釋。這些註釋應該在字段或getter中。在這種情況下,只需將註釋從setId移動到getId(並且如果您有其他setter的註釋,則也可以移動它們)。

JPA規範:

當使用基於屬性的訪問,對象/關係映射 註解實體類註釋吸氣屬性 存取[7] ....
[7]這些註釋不能應用於setter方法。

+0

就是這樣!我可以發誓我已經在吸氣劑上設置了註釋,但是我只是將它們移開,問題就消失了。謝謝! – user599144

相關問題