JPA 实现继承关系

JPA支持继承关系,使开发者可以利用继承的思想建模。

       有一个实体Person,他是一个抽象实体,他有两个子实体:Man,Woman。

 

       先写Person类:

@Entity
@Inheritance(strategy = InheritanceType.JOINED)
//@DiscriminatorColumn(name="tableName")可选
public class Base implements Serializable {

 /**
  *
  */
 private static final long serialVersionUID = 1L;
 private Date createTime = new Date();
 
 @Id
 @GeneratedValue
 private int id;

。。。

}

注意,对于抽象父类,必须设置两个注释:

1.         Inheritance     strategy:用来声明继承策略。可选值是InheritanceType.SINGLE_TABLE(为类继承体系中的每个类创建一张相同的表)、InheritanceType.JOINED(为类继承体系中的每个类创建不同的表)和InheritanceType .TABLE_PER_CLASS(不推荐)。缺省值是InheritanceType.SINGLE_TABLE,表示只生成一张表。

2.         DiscriminatorColumn     name:用来说明子类使用那个字段区分,这里使用sex字段区分Man实体和Woman实体。

 

 

编写Man类和Woman类:

@Entity
//@DiscriminatorValue(value="users")可选
public class Users extends Base implements Serializable {
 
 private String remark="";

。。。

}

 

@Entity
//@DiscriminatorValue(value="role")可选
public class Role extends Base implements Serializable {
 
 private String name = "";

 

。。。

}

生成多张表:

 DiscriminatorColumn、 DiscriminatorValue不要设置,

 数据库中有3张表:base(id,createTime)、users(remark)、role(name)

添加user:

Hibernate: insert into Base (createTime) values (?)
Hibernate: insert into Users (remark, id) values (?, ?)

添加role:

Hibernate: insert into Base (createTime) values (?)
Hibernate: insert into Role (name, id) values (?, ?)

删除同删、修改同改、添加同加。

 

 

生存同一张表:

子类实体只需要设置DiscriminatorValue属性,当sex值为0时表示Man对象(此对象的womanService字段为null),当sex值为1时表示Woman对象(此对象的manService字段为null)。

数据库有1张表:base(id,createTime,remark,name);

 



    本文附件下载:
  • src.rar (5.1 KB)


已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐
  • —软件人才免语言低担保 赴美带薪读研!—



你可能感兴趣的:(继承,jpa,关系)