如何避免JPA中的N + 1问题,并保持几种关系?

我有以下实体:

%%cmd
where python
myprogram "blabla" -x -y -z

使用我尝试过的Criteria API:

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

但是执行查询时:

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);

执行多个查询(与实体3相关)。我认为问题是因为这种关系在另一种内部。因为当您完成第一个联接时,没有几个查询。

感谢您的帮助。非常感谢

condorc 回答:如何避免JPA中的N + 1问题,并保持几种关系?

默认情况下,这种关系就像冬眠的Collections多么懒惰, 如果您定义了关系,那么Lazy如何不接收LazyLoadException来检查您的配置。

本文链接:https://www.f2er.com/3116159.html

大家都在问