鉴于以下设计的JPA实体继承关系:
@MappedSuperclass
@Inheritance(strategy = InheritanceType.JOINED)
@DiscriminatorColumn(name = "SUB_TYPE")
abstract class SuperEntity
@Entity
@DiscriminatorValue("SUB")
class SubEntity extends SuperEntity
为什么以下方法调用没有返回类SubEntity
的实例?
EntityManager em;
Long idOfSub = 42;
SuperEntity subAsSup = em.getReference(SuperEntity.class, idOfSub);
这种意外行为背后的理由是什么?什么替代代码可以按预期工作?
澄清:我实际上并不想做出(可能是硬编码的)决定,即我是否期望返回类SubEntity
或其他类型的子实体的实例。我的真实场景中的客户端代码通过类SuperEntity
的API进行通信,并不关心它是什么具体类型的子实体。