我想知道是什么样的区别MappedSuperclass和Entity Abstract Class当一个人想要从一个超类派生Hibernate。我知道这Hibernate不会在数据库中为表创建表MappedSuperclass。我在JavaEEdoc中读到 “抽象实体就像具体实体,但是无法实例化” 。由于无法实例化它们,因此我推断数据库中 没有匹配的表 。我对吗?
MappedSuperclass
Entity Abstract Class
Hibernate
JavaEE
如果是这样,使用a MappedSuperclass和an 之间实际上有什么区别,并且Entity Abstract Class在每种情况下对软件和数据库有什么影响?
MappedSuper类将继承用于字段和代码的重用。例如,如果您希望所有实体都具有Long id和Long version字段,则可以使它们全部扩展一个包含这两个字段以及它们的getter,setter等BaseEntity注释的类MappedSuperclass。但是,您永远不会拥有一个具有关联的实体与BaseEntity:关联将始终与BaseEntity的特定子类关联。
Long id
Long version
BaseEntity
父实体用于“实体多态性”。例如,您可以想象有两种Message:an EmailMessage和a SmsMessage。两者都将包含源,目标和主体。但是,EmailMessage将具有电子邮件地址和主题,而SmsMessage将具有电话号码。
Message
EmailMessage
SmsMessage
您可以想象有一个Person实体,其中包含已发送消息的集合,类型为Message。该集合实际上将包含EmailMessage和SmsMessage的实例。Hibernate将根据用于继承映射的继承策略来决定实例化哪个实例:
Person