集合获取连接

时间:2012-01-26 05:47:29

标签: java hibernate jpa architecture

假设我有一个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选择集合问题是一种好习惯吗?它有副作用吗?

2 个答案:

答案 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();
}