(8) ebj学习: Jpa的SINGLE_TABLE,JOINED,TABLE_PER_CLASS三种继承策略

一 :  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;
}


最后的表结构


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值