0
我有以下的JPA實體:Hibernate的多對一急於取N + 1
@Entity
@Table(name = "app")
public class App {
@Id
private String id;
@OneToOne(mappedBy = "app")
@PrimaryKeyJoinColumn
private FileDetails fileDetails;
@ManyToOne
private Developer developer;
@ManyToOne
@JoinColumn(name = "category_id")
private Category category;
@OneToMany(mappedBy = "app", fetch = FetchType.EAGER)
private List<Image> images;
//getters, setters
}
正如你可以看到圖像實體設置爲EAGER
抓取。 我想用分頁選擇所有實體和我一般DAO使用此方法:
public List<T> findByPage(int pageNum, int pageSize) {
CriteriaQuery<T> cq = getEntityManager()
.getCriteriaBuilder().createQuery(entity);
cq.select(cq.from(entity));
int firstResult = pageNum * pageSize;
return getEntityManager().createQuery(cq)
.setFirstResult(firstResult)
.setMaxResults(pageSize)
.getResultList();
}
然而,當我運行查詢我有N + 1相對於圖像實體。因此,對於每個選擇的應用程序,我都會選擇N個圖像的數量。 Isnt EAGER抓取應該解決這個問題?什麼可能是一個解決方案?