gpt4 book ai didi

java - 如何避免 JPA 中存在多个关系的 N+1 问题?

转载 作者:太空宇宙 更新时间:2023-11-04 09:17:17 27 4
gpt4 key购买 nike

我有以下实体:

@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;
}

使用我尝试过的 Criteria 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 相关)。我认为问题在于,这种关系存在于另一种关系之中。因为当您执行第一个连接时,不会有多个查询。

非常感谢您的帮助。非常感谢

最佳答案

默认情况下,hibernate 处理类似于 Collections 的关系是多么懒惰,如果您定义了 Lazy 和未收到 LazyLoad 异常之间的关系,请检查您的配置。

关于java - 如何避免 JPA 中存在多个关系的 N+1 问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58821995/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com