Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 集合获取联接_Java_Hibernate_Jpa_Architecture - Fatal编程技术网

Java 集合获取联接

Java 集合获取联接,java,hibernate,jpa,architecture,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("selec

假设我有一个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{
@OneToMany(fetch=FetchType.LAZY)
private List children=new ArrayList();
}
公共列表fetchAll(){
返回em.createQuery(“从MyEntity e中选择不同的e join fetch e.children”)
.getResultList();
}
如果没有distinct关键字,它将生成MyEntity和e.children的叉积


同时使用distinct和join fetch以避免集合中的N+1 Select问题是否被认为是一种良好的做法?它有副作用吗?

内部连接不应该起作用吗

public List<MyEntity> fetchAll() {
    return em.createQuery("select e from MyEntity e inner join fetch e.children")
            .getResultList();
}
public List fetchAll(){
返回em.createQuery(“从MyEntity e内部连接中选择e获取e.children”)
.getResultList();
}

内部联接不应该起作用吗

public List<MyEntity> fetchAll() {
    return em.createQuery("select e from MyEntity e inner join fetch e.children")
            .getResultList();
}
public List fetchAll(){
返回em.createQuery(“从MyEntity e内部连接中选择e获取e.children”)
.getResultList();
}
您必须使用“SELECT DISTINCT”,因为执行的是MyEntity和子级之间的笛卡尔积

对不起,我的英语不好

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


对不起,我的英语

不,它有同样的结果。假设我有两个MyEntity,每个MyEntity有两个孩子。这个查询返回4个MyEntity,但我只想要2个。不,它有相同的结果。假设我有两个MyEntity,每个MyEntity有两个孩子。这个查询返回4个MyEntity,但我只想要2个。