问题描述
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;
}
当我仅阅读一行时,我该如何说服我将全部孩子退还给我?
1楼
您可以尝试使用提取模式:
@OneToMany(cascade = CascadeType.ALL, mappedBy = "provider", orphanRemoval = true, fetch = FetchType.EAGER)
@Fetch(FetchMode.SUBSELECT)
private final Set<CredentialFieldDefinition> credentialFieldDefinitionList;
这样credentialFieldDefinitionList
将在单独的查询中初始化。