Skip to main content

在用JPA的时候,如果每个实体都有一些共通的属性,例如创建时间,最后修改时间,那可以把这些属性放到一个公共实体里,用 @MappedSuperclass 标记,然后其它实体继承这个类即可。这个是简单的方式,下面说一下真正的实体继承。

先说一个场景,开发一个产品实体,过几天产品狗告诉你,有个特殊的产品钢笔,这里有2个特殊的属性,品牌和钢笔的粗细,在你还没发火之前,又告诉你还有另外一个特殊的产品订书器,它有长和宽。

按照面向对象的思维,你需要创建另外2个实体然后继承之前的实体来实现。代码如下:

Pen

Stapler

测试

表截图:

这里需要介绍3个注解

@Inheritance 注解标记继承策略,可以项有3个:

  • SINGLE_TABLE:父类和所有子类都在一张表中。并创建一个字段来区分他们
  • TABLE_PER_CLASS:每个类型都有自己的表,互不干扰。
  • JOINED:父类和子类都有自己的表,和TABLE_PER_CLASS的区别是,子类中的父类属性值存储在父类表中。

@DiscriminatorColumn 注解用来指定区分数据的列名和列里面的值是什么

@DiscriminatorValue 注解指定每个类型的值



2017-08-31 2018-07-06 19:19:23