0

我有以下实体关系(在 Kotlin 中):

发票实体:

@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "contact")
var contactEntity: ContactEntity?,

联系实体:

@OneToOne(mappedBy = "contactEntity", fetch = FetchType.EAGER)
var accountingContactEntity: AccountingContactEntity?

会计联系实体:

@OneToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "contact")
var contactEntity: ContactEntity?

当我执行查询方法时

@EntityGraph(
    attributePaths = ["contactEntity"],
    type = EntityGraph.EntityGraphType.LOAD
)
findByDateBetween(...): Set<InvoiceEntity>

然后我希望查询包含JOINContact-Entity 和 AccountingContactEntity。

但是AccountingContactEntity 缺少它。SELECT相反,为每个 AccountingContactEntity (N+1) 执行一个额外的。不应该EntityGraph.EntityGraphType.LOAD 触发对 ContactEntity 中 FetchType.EAGER 注释的识别,强制JOIN为 AccountingContactEntity 吗?

唯一有效的是添加"contactEntity.accountingContactEntity"到 EntityGraph。

没有其他解决方案吗?

顺便说一句,如果我设置 @OneToOne(fetch = FetchType.EAGER)InvoiceEntity 的 contactEntity 并执行一个 normal find(invoiceId),那么两个表都会按预期加入。

4

0 回答 0