通过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 { ... }
- Hibernate多对一更新外键为null
- 如何将Java中的二维矩阵映射到Hibernate / JPA?
- 限制JPA中集合的大小
- Hibernate Bi-Directional多对多关联创建重复
- 从Hibernate中的模型中获取表名
- Hibernate Session方法saveOrUpdate()和merge()之间有什么区别?
- 从POJO获取带注释的hibernate tablename
- ClassCastException:org.springframework.orm.jpa.EntityManagerHolder无法强制转换为org.springframework.orm.hibernate5.SessionHolder
- Hibernateexception帮助:TransientObjectException