Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.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 EJB3快速加载_Java_Hibernate_Jpa_Ejb_Lazy Loading - Fatal编程技术网

Java EJB3快速加载

Java EJB3快速加载,java,hibernate,jpa,ejb,lazy-loading,Java,Hibernate,Jpa,Ejb,Lazy Loading,我使用EJB3。我有基类A,还有依赖类B,C,D @Entity @Table(name = "A") public class A implements Serializable { @OneToMany(cascade = CascadeType.ALL) private List<B> bs; @OneToMany(cascade = CascadeType.ALL) private List<C> cs; @OneTo

我使用EJB3。我有基类A,还有依赖类B,C,D

@Entity
@Table(name = "A")
public class A implements Serializable {

    @OneToMany(cascade = CascadeType.ALL)
    private List<B> bs;

    @OneToMany(cascade = CascadeType.ALL)
    private List<C> cs;

    @OneToMany(cascade = CascadeType.ALL)
    private List<D> ds;

}
@实体
@表(name=“A”)
公共类A实现可序列化{
@OneToMany(级联=级联类型.ALL)
私人名单;
@OneToMany(级联=级联类型.ALL)
私人名单;
@OneToMany(级联=级联类型.ALL)
私人名单;
}

我有个问题。如何快速加载所有表格?我想使用
em.find(A.class,id)

您必须在OneToMany注释中使用获取属性,以便:

@Entity
@Table(name = "A")
public class A implements Serializable {

    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    private List<B> bs;

    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    private List<C> cs;

    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    private List<D> ds;

}
@实体
@表(name=“A”)
公共类A实现可序列化{
@OneToMany(cascade=CascadeType.ALL,fetch=FetchType.EAGER)
私人名单;
@OneToMany(cascade=CascadeType.ALL,fetch=FetchType.EAGER)
私人名单;
@OneToMany(cascade=CascadeType.ALL,fetch=FetchType.EAGER)
私人名单;
}

我找到了问题的答案

@Entity
@Table(name = "A")
public class A implements Serializable {

    @OneToMany(cascade = CascadeType.ALL)
    @Fetch(FetchMode.SUBSELECT)
    private List<B> bs;

    @OneToMany(cascade = CascadeType.ALL)
    @Fetch(FetchMode.SUBSELECT)
    private List<C> cs;

    @OneToMany(cascade = CascadeType.ALL)
    @Fetch(FetchMode.SUBSELECT)
    private List<D> ds;

}
@实体
@表(name=“A”)
公共类A实现可序列化{
@OneToMany(级联=级联类型.ALL)
@Fetch(FetchMode.SUBSELECT)
私人名单;
@OneToMany(级联=级联类型.ALL)
@Fetch(FetchMode.SUBSELECT)
私人名单;
@OneToMany(级联=级联类型.ALL)
@Fetch(FetchMode.SUBSELECT)
私人名单;
}
解决方案是@Fetch(FetchMode.SUBSELECT)。有一篇关于这个问题的好文章


谢谢您的回复。但是fetch=FetchType.EAGER只能有一个依赖项您可以将fetch=FetchType.EAGER放在类树层次结构中的每个关系中。我没有Hibernate文档中的树层次结构:我们这里有两个正交概念:何时提取关联以及如何提取关联。重要的是不要混淆它们。我们使用fetch来调整性能。当你谈论即时抓取时,你问的是何时抓取(
FetchType.eager
FetchType.LAZY
),而不是如何抓取(
@fetch
)。