我有一个父类Party和一个子类LiveParty以及其他子类(请参见下文),并且在数据库中始终是一对一的关系。每当我使用Criteria API时,它都会在两者之间进行左外部联接。我想强制在父级和子级之间进行内部联接,因为这会影响某些查询的性能,但无法在文档中找到实现此目的的方法,有人可以建议一种方法吗?

@Entity
@Table(name = "Party", schema = "dbo")
@Inheritance(strategy = InheritanceType.JOINED)
public abstract class Party{
...
}

@Entity
@Table(name = "LiveParty", schema = "dbo")
@PrimaryKeyJoinColumn(name = "partyId")
public class LiveParty extends Party {
...
}

最佳答案

每当我使用Criteria API时,它都会在两者之间进行左外部联接。


这确实是使用JOINED策略时得到的结果,Hibernate将在与继承树的给定节点的后代相对应的所有表上执行外部联接,以推断并返回给定行的实际类型(有关详细信息,请参见ChssPly76的this great previous answer

换句话说,我认为您不能强迫Hibernate使用内部联接,至少不能不更改映射(使用辅助表或OneToOne关系,我不确定您的约束到底是什么)。

相关问题


Hibernate Inheritance Strategy and Why
How does the JPA handle partial, non-disjoint inheritance (using InheritanceType.JOINED in class-per-table scenario) along with EntityManager.find()?

07-25 21:05