鑑於這種類:爲什麼我不能重寫和註釋一個實體映射的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"))
子類不改變錯誤。
可能重複[Hibernate:如何從映射的超類覆蓋屬性](https://stackoverflow.com/questions/5257921/hibernate-how-override-an-attribute-from-mapped-super-class) – crizzis
@crizzis這個答案並不能解決問題。 – Mark
JPA繼承遵循java繼承,因此您可以覆蓋數據庫中使用的列,但不覆蓋映射本身。因此,無法更改一次設置的ID列,也不能將現有字段標記爲子類中的ID。您可以通過讓JPA選擇抽象類中的字段(將其命名爲稍微不同並將其標記爲臨時)來欺騙事物,然後在子類中定義屬性的映射,請參閱https://stackoverflow.com/questions/13874528/what -accesstype-field-accesstype-property-and-access改變訪問類型 – Chris