2012-01-26 41 views
1

假设我有一个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的跨产品。

使用独立和联合提取避免N + 1选择合并问题是否被认为是一种好的做法?它有副作用吗?

回答

1

您必须使用“SELECT DISTINCT”,因为正在执行MyEntity和子项之间的笛卡尔积。

对不起,我的英语

0

不应该内部联接做的伎俩?

public List<MyEntity> fetchAll() { 
    return em.createQuery("select e from MyEntity e inner join fetch e.children") 
      .getResultList(); 
} 
+0

不,它有同样的结果。假设我有两个MyEntities和两个孩子。此查询返回4个MyEntities,但我只需要2个。 – ike3