一 : SINGLE_TABLE继承策略
Animal.java
import java.io.Serializable;
import javax.persistence.DiscriminatorColumn;
import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
/**
* 单表继承A
* */
@Entity
@Inheritance(strategy=InheritanceType.SINGLE_TABLE) // 指定为单表继承
@DiscriminatorColumn(name="animalType") // 标识字段定义
@DiscriminatorValue("A") // 该类的标识
public class Animal {
@Id
@GeneratedValue
private int id;
private String name;
private String sex;
}
Bird.java
import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;
@Entity
@DiscriminatorValue("B")
public class Bird extends Animal{
private int height;
}
Pig.java
import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;
@Entity
@DiscriminatorValue("P")
public class Pig extends Animal {
private int weight;
}
最后的表结构
二 Join映射
Animal.java
import java.io.Serializable;
import javax.persistence.DiscriminatorColumn;
import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
/**
* Join映射
* 父类,子类对应不同的表,子类中只存在其扩展的特殊属性(不包含父类的属性)
*
* */
@Entity
@Inheritance(strategy=InheritanceType.JOINED) // 指定为单表继承
public class Animal {
@Id
@GeneratedValue
private int id;
private String name;
private String sex;
}
Bird.java
import javax.persistence.Entity;
@Entity
public class Bird extends Animal {
private int height;
}
最后的表结构
三 TABLE_PER_CLASS
Animal.java
import java.io.Serializable;
import javax.persistence.DiscriminatorColumn;
import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
/**
* TABLE_PER_CLASS策略:父类和子类对应不同的表,子类中存在所有的属性
* (包含从父类继承下来的所有属性)
*
* */
@Entity
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
public class Animal {
@Id
// @GeneratedValue (使用TABLE_PER_CLASS时候,不能用GeneratedValue)
private int id;
private String name;
private String sex;
}
Bird.java
import javax.persistence.Entity;
@Entity
public class Bird extends Animal {
private int height;
}
最后的表结构