您的位置:首页 > 其它

JPA基础(十四):JPA中的继承映射关系

2011-12-03 19:02 381 查看
Employee.java:(基类)

@Entity
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)//选择继承策略
@DiscriminatorColumn(name="type")//配置鉴别器
@DiscriminatorValue("0")//设置鉴别器值
public class Employee {
@Id
@GeneratedValue
private Integer id;
private String name;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}


其中@Inheritance(strategy=InheritanceType.SINGLE_TABLE)//选择继承策略 可以选择多种策略,如下图所示:



JOINED:继承的子类各自生成一张表

SINGLE_TABLE:只生成一张表,用一个字段当鉴别器

TABLE_PER_CLASS:每个类都生产一张表,包括基类

Skiller.java(继承自Employee.java)

@Entity
@DiscriminatorValue("1")
public class Skiller extends Employee {
private String skill;

public String getSkill() {
return skill;
}

public void setSkill(String skill) {
this.skill = skill;
}
}


Sales.java(继承自Employee.java)

@Entity
@DiscriminatorValue("2")
public class Sales extends Employee {
private String sell;
public String getSell() {
return sell;
}
public void setSell(String sell) {
this.sell = sell;
}
}


测试:

@Test
public void save(){
EntityManagerFactory factory=Persistence.createEntityManagerFactory("sample");
EntityManager em=factory.createEntityManager();
em.getTransaction().begin();
Employee p1=new Employee();
p1.setName("Jim");
Skiller p2=new Skiller();
p2.setName("Hanson");
p2.setSkill("skill");
Sales p3=new Sales();
p3.setName("Brian");
p3.setSell("sale");
em.persist(p1);
em.persist(p2);
em.persist(p3);
em.getTransaction().commit();
em.close();
factory.close();
}


打开数据库:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: