ORM--繼承--Hibernate4.0註解版

類的繼承關係在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;
	}

}
相關文章
相關標籤/搜索