類的繼承關係在Hibernate中有三種表現方式。 java
1.每一個具體類一張表,簡單的說就是每一個子類都對應不一樣的表,分表保存父類的屬性與子類的屬性 dom
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)指明瞭繼承映射的策略,若是父類使用abstract進行修飾,將不映射父類。 ui
Flight類與Jet類分別映射到不一樣的表上。 this
Flight | |
id | name |
Jet | ||
id | name | type |
@Entity @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) //public abstract class Flight { public class Flight { private String id; @Id @GeneratedValue(generator = "flight-uuid") @GenericGenerator(name = "flight-uuid", strategy = "uuid") public String getId() { return id; } public void setId(String id) { this.id = id; } private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } } @Entity public class Jet extends Flight { private String type; public String getType() { return type; } public void setType(String type) { this.type = type; } }
2.子類的屬性保存到獨立的表中,父類的屬性,保存到父類的表中。 spa
cat | |
id | name |
domesticcats |
|
id | type |
@Entity @Table(name = "CATS") @Inheritance(strategy = InheritanceType.JOINED) public class Cat { private String id; private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } public void setId(String id) { this.id = id; } @Id @GeneratedValue(generator = "cat-uuid") @GenericGenerator(name = "cat-uuid", strategy = "uuid") String getId() { return id; } } @Entity @PrimaryKeyJoinColumn(name="CAT") public class DomesticCat extends Cat { private String catType; public String getCatType() { return catType; } public void setCatType(String catType) { this.catType = catType; } }
3.單表繼承。父類與子類映射到同一張表經過鑑別值來區別子類對象。 code
@DiscriminatorColumn定義了鑑別值的列屬性。@DiscriminatorValue則指明瞭具體類的鑑別值。 對象
payment | |||
id | amount | cardtype | paymentType |
@Entity @Inheritance(strategy=InheritanceType.SINGLE_TABLE) @DiscriminatorColumn( name="paymentType", discriminatorType=DiscriminatorType.STRING ) @DiscriminatorValue("Payment") public class Payment extends IdEntity { private BigDecimal amount; public BigDecimal getAmount() { return amount; } public void setAmount(BigDecimal amount) { this.amount = amount; } } @Entity @DiscriminatorValue("CreditPayment") public class CreditPayment extends Payment { private String cardtype; public String getCardtype() { return cardtype; } public void setCardtype(String cardtype) { this.cardtype = cardtype; } }