当前位置: 代码迷 >> java >> Hibernate渴望加载未获取所有子行
  详细解决方案

Hibernate渴望加载未获取所有子行

热度:27   发布时间:2023-07-26 14:17:14.0

Hibernate版本4.3.10

我具有示例中所述的父子关系。 在某些情况下,我们期望查询Provider时仅返回一行。 在这种情况下,我们通过将setMaxResults方法调用为1来限制条件。

SQL转储显示,hibernate进行外部联接调用,最终返回多个行,但是由于条件上的限制,仅从数据库中读取了第一子行。

    @Entity
    @Table(name = "F_PROVIDER")
    public class Provider {
        @OneToMany(cascade = CascadeType.ALL, mappedBy = "provider", orphanRemoval = true, fetch = FetchType.EAGER)
        private final Set<CredentialFieldDefinition> credentialFieldDefinitionList;
}

@Entity
@Table(name = "F_CRED_FIELDS", uniqueConstraints = { @UniqueConstraint(columnNames = { "name", "provider_id" }) })
public class CredentialFieldDefinition {
@ManyToOne(targetEntity = Provider.class, optional = false)
    @JoinColumn(name = "PROVIDER_ID", nullable = false, unique = false)
    private Provider provider;
}

当我仅阅读一行时,我该如何说服我将全部孩子退还给我?

您可以尝试使用提取模式:

@OneToMany(cascade = CascadeType.ALL, mappedBy = "provider", orphanRemoval = true, fetch = FetchType.EAGER)
@Fetch(FetchMode.SUBSELECT)
private final Set<CredentialFieldDefinition> credentialFieldDefinitionList;

这样credentialFieldDefinitionList将在单独的查询中初始化。

  相关解决方案