2017-06-07 60 views
1

鑑於這種類:爲什麼我不能重寫和註釋一個實體映射的getter方法?

@MappedSuperclass 
public abstract class AbstractEntity { 

    int id; 
    public void setId(int id) { this.id = id; } 
    public int getId() { return id; } 

    // other mappings 
} 

我想定義的實體:

@Entity 
public class SomeEntity extends AbstractEntity { 

    @Override 
    @Id // or @OneToOne etc. 
    public int getId() { return id; } 
} 

但是失敗了 「未指定的標識符」(或「無法確定型」)的錯誤在SomeEntity上。如果我從超類中移除getter,它就會起作用。我不能做這個覆蓋策略嗎?爲什麼不,或者如果是 - 如何?

添加

@AttributeOverride(name = "id", column = @Column(name = "ID")) 

子類不改變錯誤。

+0

可能重複[Hibernate:如何從映射的超類覆蓋屬性](https://stackoverflow.com/questions/5257921/hibernate-how-override-an-attribute-from-mapped-super-class) – crizzis

+0

@crizzis這個答案並不能解決問題。 – Mark

+0

JPA繼承遵循java繼承,因此您可以覆蓋數據庫中使用的列,但不覆蓋映射本身。因此,無法更改一次設置的ID列,也不能將現有字段標記爲子類中的ID。您可以通過讓JPA選擇抽象類中的字段(將其命名爲稍微不同並將其標記爲臨時)來欺騙事物,然後在子類中定義屬性的映射,請參閱https://stackoverflow.com/questions/13874528/what -accesstype-field-accesstype-property-and-access改變訪問類型 – Chris

回答

相關問題