通过JPA注释更改类层次结构分支中的inheritance策略

今天我遇到了一个有趣的问题。 我一直在使用Hibernate JPAinheritance层次结构,采用SINGLE_TABLE策略。 后来,我在层次结构中添加了一个超类,它定义了TABLE_PER_CLASS策略。 结果是整个层次结构表现为TABLE_PER_CLASS 。 当然,如果我们阅读@Inheriatance javadoc,这似乎是公平的:

定义要用于实体类层次结构的inheritance策略。 它在实体类上指定,该实体类是实体类层次结构的根。

但是, Hibernate文档说:

可以对同一inheritance层次结构的不同分支使用不同的映射策略

并继续豁免本声明。 这是通过XML配置完成的。

所以,最后,我的问题是 – 是否有一种方法(可能是一个hibernate属性)通过注释启用上述xml行为,并使用EntityManager

好吧,如果你进一步阅读Hibernate文档的“inheritance”一章:-)你会看到混合每层次表和每子类表策略的例子实际上只不过是table-per – 抛出辅助表的层次结构:

       ...    ...    ...   

您可以使用@SecondaryTable annotation执行相同的操作:

 @Entity @Inheritance(strategy=InheritanceType.SINGLE_TABLE) @DiscriminatorColumn(name="PAYMENT_TYPE") @DiscriminatorValue("PAYMENT") public class Payment { ... } @Entity @DiscriminatorValue("CREDIT") @SecondaryTable(name="CREDIT_PAYMENT", pkJoinColumns={ @PrimaryKeyJoinColumn(name="payment_id", referencedColumnName="id") ) public class CreditCardPayment extends Payment { ... } @Entity @DiscriminatorValue("CASH") public class CashPayment extends Payment { ... }