JPA实体继承的映射

JPA实体继承的映射

1、父类只存在实体公共字段查询

@MappedSuperclass
public class Model implements Serializable{
    private Date createdAt;
    private Date updatedAt;

    //省略getter、setter
}
@Entity
@IdClass(value = PartyPK.class)
@Table(name = "account")
public class Account extends Model{
    @Id
    private String partyId;
    @Id
    private String accountTypeId;

    @OneToOne
    @JoinColumn(name = "account_type_id",insertable = false,updatable = false)
    private AccountType accountType;

    private String account;
    private String password;
    private String passwordSalt;
    private String headImage;

     //省略getter、setter
}

2、实体继承实体

        继承映射使用@Inheritance来注解,它的strategy属性的取值由枚举InheritanceType来定义(包括SINGLE_TABLE、TABLE_PER_CLASS、JOINED,分别对应三种继承策略)。@Inheritance注解只能作用于继承结构的超类上。如果不指定继承策略,默认使用SINGLE_TABLE。

JPA提供了三种继承映射策略:
        ①、 一个类继承结构一个表的策略。这是继承映射的默认策略。即如果实体类B继承实体类A,实体类C也继承自实体A,那么只会映射成一个表,这个表中包括了实体类A、B、C中所有的字段,JPA使用一个叫做“discriminator列”来区分某一行数据是应该映射成哪个实体。注解为:@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
        ②、 联合子类策略。这种情况下子类的字段被映射到各自的表中,这些字段包括父类中的字段,并执行一个join操作来实例化子类。注解为:@Inheritance(strategy = InheritanceType.JOINED)
        ③、 每个具体的类一个表的策略。注解为:@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)

@Entity  
@Table(name = "model")  
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)  
@DiscriminatorColumn(name = "model_type")  
public class Model implements Serializable {  
  
    @Id  
    @GeneratedValue(strategy = GenerationType.IDENTITY)  
    protected Integer id;  
       
    protected String name;  
  
    //省略 getter、setter  
      
}
@Entity  
@DiscriminatorValue("test1")  
public class Test extends Model{  
   
    private String age;  
  
    //省略getter、setter
      
} 

其他策略、说明参考:http://stackoverflow.com/questions/916169/cannot-use-identity-column-key-generation-with-union-subclass-table-per-clas

转载于:https://my.oschina.net/cxlt216/blog/756779

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值