我有以下实体:

@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有关)。我认为问题是因为这种关系在另一种内部。因为当您完成第一个联接时,没有几个查询。

多谢您的协助。非常感谢

最佳答案

默认情况下,这种关系就像“收藏集”一样,休眠处理的是多么懒惰,
如果您定义了关系,则如何懒惰而不接收LazyLoadException检查您的配置。

10-04 19:03