|
|
在設計類別時,您也許會有個父類別(抽象或非抽象),當中定義了所有的子類別所必須繼承的屬性,然而它不是實體類別,無需對應至任何的表格,然而您又想將一些映射的預設資訊寫在當中,子類別繼承之後,那些映射資訊也跟著繼承,必要時您又可以重新定義映射資訊。 此時您可以在該父類別上標註@MappedSuperclass,例如: @MappedSuperclass
public class Person { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; private String name; private Long age; .... } 當實體子類別繼承之時: @Entity
@Table(name="T_USER") @Inheritance(strategy=InheritanceType.JOINED) public class User implements Serializable { // 被繼承的 id 會映射至 T_USER.ID 欄位 // 被繼承的 name 會映射至 T_USER.NAME 欄位 // 被繼承的 age 會映射至 T_USER.AGE 欄位 .... } 接著實體子類別再繼承: @Entity
@Table(name="T_NOBODY") @PrimaryKeyJoinColumn(name="NOBODY_ID") public class Nobody extends User { private String nobodyProp; .... } 而若您想重新定義映射資訊,可以使用@AttributeOverride標註,例如: @Entity
@Table(name="T_USER") @Inheritance(strategy=InheritanceType.JOINED) @AttributeOverride(name="id", column=@Column(name="USER_ID")) public class User implements Serializable { // 被繼承的 id 被重新定義映射至 T_USER.USER_ID 欄位 // 被繼承的 name 會映射至 T_USER.NAME 欄位 // 被繼承的 age 會映射至 T_USER.AGE 欄位 .... } 若有多個屬性必須重新定義,則使用@AttributeOverrides,例如: @AttributeOverrides({
@AttributeOverride(name="xxx", column=@Column("USER_XXX")), @AttributeOverride(name="ooo", column=@Column("USER_OOO")) }) |