簡體   English   中英

如何避免 JPA 中存在多個關系的 N+1 問題?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM