Java EJB3快速加载
我使用EJB3。我有基类A,还有依赖类B,C,DJava 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
@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
)。