首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

JPA 沿袭方式

2012-12-28 
JPA 继承方式@Entity@Inheritance(strategy InheritanceType.SINGLE_TABLE)@Table(name WINDOW_FILE

JPA 继承方式

@Entity@Inheritance(strategy = InheritanceType.SINGLE_TABLE)@Table(name = "WINDOW_FILE")@DiscriminatorColumn(name = "DISCRIMINATOR", discriminatorType = DiscriminatorType.STRING, length = 30)@DiscriminatorValue("WindowFile")public class WindowFile {@Id@GeneratedValue(strategy = GenerationType.AUTO)private Integer id;@Basic@Column(name = "NAME")private String name;@Basic@Column(name = "TYPE")private String type;@Basic@Column(name = "DATE")private Date date;//省略get set}

@Entity@DiscriminatorValue("Folder")public class Folder extends WindowFile {@Basic@Column(name = "FILE_COUNT")private Integer fileCount;//省略get set}

?

@Entity@DiscriminatorValue("Document")public class Document extends WindowFile {@Basic@Column(name = "SIZE")private String size;//省略get set}

?

?以上通过列DISCRIMINATOR的不同,区分具体父子实体。

?

实际表结构如下:

WINDOW_FILE? DISCRIMINATOR,ID,NAME,DATE,TYPE,SIZE,FILE_COUNT

?

当你使用WindowFile实体时,实际表的字段为DISCRIMINATOR='WindowFile',SIZE与FILE_COUNT永远是空

当使用Folder实体时,DISCRIMINATOR='Folder',SIZE永远是空,FILE_COUNT为实际值。

Document同理,与Folder类似。

?

@Entity@Table(name = "T_ANIMAL")@Inheritance(strategy = InheritanceType.JOINED)public class Animal {@Id@Column(name = "ID")@GeneratedValue(strategy = GenerationType.AUTO)private Integer id;@Column(name = "NAME")private String name;@Column(name = "COLOR")private String color;//省略get set}

?

@Entity@Table(name = "T_BIRD")@PrimaryKeyJoinColumn(name = "BIRD_ID")public class Bird extends Animal {@Column(name = "SPEED")private String speed;//省略get set}

?

@Entity@Table(name = "T_DOG")@PrimaryKeyJoinColumn(name = "DOG_ID")public class Dog extends Animal {@Column(name = "LEGS")private Integer legs;//省略get set}

?

?

实际表结构如下:

T_ANIMAL? ID,COLOR,NAME

T_BIRD? SPEED,BIRD(既是外键,也是主键)

T_DOG? LEGS,DOG_ID(既是外键,也是主键)

@Entity@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)@Table(name = "T_VEHICLE")public class Vehicle { // 基类@Id// @GeneratedValue@Column(name = "ID")private Integer id;@Column(name = "SPEED")private Integer speed;// 速度//省略get set}

@Entity@Table(name = "T_CAR")public class Car extends Vehicle {@Column(name = "ENGINE")private String engine;// 发动机//省略get set}

?

一旦使用这种策略就意味着你不能使用AUTO generator 和IDENTITY generator,即主键值不能采用数据库自动生成。

?

实际表结构如下:

T_VEHICLE? ID,SPEED

T_CAR? ID,SPEED,ENGINE

?

热点排行