假设我有一个JPA实体和一个查询:
@Entity
public class MyEntity {
@OneToMany(fetch = FetchType.LAZY)
private List<ChildEntity> children = new ArrayList<ChildEntity>();
}
public List<MyEntity> fetchAll() {
return em.createQuery("select distinct e from MyEntity e join fetch e.children")
.getResultList();
}
如果没有不同关键字,它将执行MyEntity和e.children的交叉产品。
同时使用distinct和join fetch以避免N + 1选择集合问题是一种好习惯吗?它有副作用吗?
答案 0 :(得分:1)
你必须使用“SELECT DISTINCT”因为正在MyEntity和孩子之间执行笛卡尔积。
抱歉我的英文
答案 1 :(得分:0)
不应该是内部联接吗?
public List<MyEntity> fetchAll() {
return em.createQuery("select e from MyEntity e inner join fetch e.children")
.getResultList();
}