如何让Hibernate忽略子类?

时间:2017-06-07 16:40:49

标签: java hibernate

我有两个C1和C2类。每个都坚持自己的表。每个都有自己的Hibernate XML描述,提到自己的表。这些类之间根本没有联系。

除了C1是C2的子类。

显然,C1的XML从C2中复制了很多(添加了一些东西),但它是一个单独的副本。同样:XML文件都没有提到另一个类或另一个表。

但是现在,当我执行“From C2”查询时,Hibernate会同时提取所有表格。

逻辑上,这是有道理的:C1实际上是C2,所以如果我想要所有C2,我也需要C1,所以我们需要读取所有C1的表。 Hibernate必须使用反射来检测C2的子类C1。

假设这是预期的行为(虽然我不期望它!)我该如何避免它?有什么方法我可以告诉Hibernate当我说“从C2”我真的只是C2而不是C1启动?是否有一个我可以添加到查询中的子句将它限制为非C1类型的对象,同时也避免了首先查询C1表的性能损失?

1 个答案:

答案 0 :(得分:2)

从C2中选择时,默认情况下也会在休眠时选择C1。它被称为多态查询。请参阅Polymorphic queriesTutorial

要修复/解决它,您应该添加到实体PolymorphismType.EXPLICIT

  

@Entity(polymorphism = PolymorphismType.EXPLICIT)

来自https://docs.jboss.org/hibernate/orm/5.2/javadocs/

  

IMPLICIT - 如果检索到任何超级实体,则检索该实体。默认

     

EXPLICIT - 仅在明确询问时才检索此实体。