在信用办时。做失信、守信、黑名单这一块的时候。先把原来的需求看了看。紧接着就開始设计实体,这一块大部分都是同样的信息,所以就设计了一个实体,而且用一个状态标识出来是失信、守信还是黑名单。
在之后的改动中,特别不方便。每次改动这一块,这都要出问题。也就是说每一次都须要自己的实体去维护自己的状态。
可是假设我们把这个状态抽出来,就变成了我们公共的去维护这些“状态”,这样就大大简化了我们的工作,我们仅仅须要对基本表的信息进行维护就能够了。这就是单表继承。
代码:
父类:
@Entity(name="Company")@Inheritance(strategy=InheritanceType.SINGLE_TABLE)@DiscriminatorColumn(name="type",discriminatorType=DiscriminatorType.STRING)public class Company { 基本字段 }子类:
@Entity@DiscriminatorValue(value="OnCreaditCompany")public class OnCreaditCompany extends Company {}
单表继承。是一张大表中,包含了父类,子类的全部属性。通过Type来区分是哪个子类。单表继承尽管是多写了几个实体类,可是类和类之间的层次结构清晰,而且更具有面向对象的优势。
相比而言,比我们设计的用一个状态字段去维护,操作起来就更方便了。
有利必有弊,我们要权衡一下,并非全部的情况下实体继承都是适用的。可是也不能不考虑实体继承,假设是大量的数据库表的话,訪问数据时将存在大量的关联表操作,效率低。