我是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
(当您尝试在分离的对象上加载惰性关联时会发生这种情况)比实际解决方案更能解决。