[英]How Can I avoid N+1 issue in JPA with several relationship?
我有以下實體:
@Entity
@Table(name="table1")
public class Entity1 {
@Id
private Integer id;
@OneToMany(mappedBy = "entity1")
private List<Entity2> entities2;
}
@Entity
@Table(name="table2")
public class Entity2 {
@Id
private Integer id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="id")
private Entity3 entity3;
}
使用標准 API 我嘗試過:
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<Entity1> query = cb.createQuery(Entity1.class);
Root<Entity1> entity1= query.from(Entity1.class);
entity1.fetch("entities2", JoinType.LEFT);
entity1.fetch("entities2", JoinType.LEFT).fetch("entity3", JoinType.LEFT);
但是當查詢執行時:
query.select(entity1).where(cb.and(predicates.toArray(new Predicate[predicates.size()]))));
List<Entity1> entities1 = entityManager.createQuery(query).getResultList();
執行多個查詢,其中之一(與實體 3 相關)。 我認為問題在於這種關系在另一個關系中。 因為當您第一次連接時,沒有幾個查詢。
我會很感激你的幫助。 非常感謝
默認情況下,關系就像 Collections hibernate 處理多么懶惰,如果你定義關系是多么懶惰並且沒有收到 LazyLoadException 檢查你的配置。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.