【Hibernate学习】 ——ORM(四)再次认识实体继承

          在信用办时,做失信、守信、黑名单这一块的时候,先把原来的需求看了看,紧接着就开始设计实体,这一块大部分都是相同的信息,所以就设计了一个实体,并且用一个状态标识出来是失信、守信还是黑名单。

 

        在之后的修改中,特别不方便,每次修改这一块,这都要出问题。也就是说每一次都需要自己的实体去维护自己的状态。但是如果我们把这个状态抽出来,就变成了我们公共的去维护这些“状态”,这样就大大简化了我们的工作,我们只需要对基本表的信息进行维护就可以了。这就是单表继承。

 

代码:

父类:

@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来区分是哪个子类。单表继承虽然是多写了几个实体类,但是类和类之间的层次结构清晰,并且更具有面向对象的优势。相比而言,比我们设计的用一个状态字段去维护,操作起来就更方便了。

 

       有利必有弊,我们要权衡一下,并不是所有的情况下实体继承都是适用的。但是也不能不考虑实体继承,如果是大量的数据库表的话,访问数据时将存在大量的关联表操作,效率低。

你可能感兴趣的:(【Hibernate学习】 ——ORM(四)再次认识实体继承)