小编典典

JPA /休眠差异映射超类和实体抽象类

hibernate

我想知道是什么样的区别MappedSuperclassEntity Abstract Class当一个人想要从一个超类派生Hibernate。我知道这Hibernate不会在数据库中为表创建表MappedSuperclass。我在JavaEEdoc中读到
“抽象实体就像具体实体,但是无法实例化” 。由于无法实例化它们,因此我推断数据库中 没有匹配的表 。我对吗?

如果是这样,使用a MappedSuperclass和an 之间实际上有什么区别,并且Entity Abstract Class在每种情况下对软件和数据库有什么影响?


阅读 284

收藏
2020-06-20

共1个答案

小编典典

MappedSuper类将继承用于字段和代码的重用。例如,如果您希望所有实体都具有Long idLong version字段,则可以使它们全部扩展一个包含这两个字段以及它们的getter,setter等BaseEntity注释的类MappedSuperclass。但是,您永远不会拥有一个具有关联的实体与BaseEntity:关联将始终与BaseEntity的特定子类关联。

父实体用于“实体多态性”。例如,您可以想象有两种Message:an EmailMessage和a
SmsMessage。两者都将包含源,目标和主体。但是,EmailMessage将具有电子邮件地址和主题,而SmsMessage将具有电话号码。

您可以想象有一个Person实体,其中包含已发送消息的集合,类型为Message。该集合实际上将包含EmailMessage和SmsMessage的实例。Hibernate将根据用于继承映射的继承策略来决定实例化哪个实例:

  • 所有消息都可以存储在同一表中,并且Hibernate将使用一个包含消息类型的区分列
  • EmailMessage可以存储在一个表中,而SmsMessage可以存储在另一个表中
  • 或两个实体(源,目标,主体)共有的字段都可以存储在公用表中,第二个表中的EmailMessage特定字段,第三个表中的SmsMessage特定字段。
2020-06-20