我是Hibernate和JPA的新手。
我写了一些函数,最初,我在实体类中设置 fetch = FetchType.LAZY 。但这给了我错误:

@OneToMany(cascade = CascadeType.ALL, mappedBy = "logins", fetch=FetchType.LAZY,targetEntity=Invoice.class)
public List<Invoice> getInvoiceList() {
    return invoiceList;
}

public void setInvoiceList(List<Invoice> invoiceList) {
    this.invoiceList = invoiceList;
}
然后我将其更改为fetch = FetchType.EAGER,并且工作正常。
我想知道-如果不声明FetchType会发生什么情况,Hibernate会自行确定要使用哪种方法吗?还是EAGER默认设置?
@OneToMany(cascade = CascadeType.ALL, mappedBy = "logins", fetch=FetchType.EAGER,targetEntity=Invoice.class)
public List<Invoice> getInvoiceList() {
    return invoiceList;
}

public void setInvoiceList(List<Invoice> invoiceList) {
    this.invoiceList = invoiceList;
}

最佳答案



实际上,这种行为不是特定于Hibernate的,而是由JPA规范定义的,您可以在规范或 OneToMany 批注或源的javadoc中找到答案。从来源:



话虽这么说,尽管FetchType.EAGER有非常合理的用例,但仅使用EAGER来避免LazyInitializationException(当您尝试在分离的对象上加载惰性关联时会发生这种情况)比实际解决方案更能解决。

10-07 12:49