我不得不在某些类中将fetchtype从EAGER更改为LAZY,以防止Hibernate加载所有关联的实体,但是更改fetchtype似乎不起作用,并且仍然像以前一样加载了实体。我还看到,Hibernate首先运行SELECT来加载所有文档,然后对每个相关Profile进行一次单独的SELECT(如果它们不同)。取决于某些文档是否与相同的配置文件相关。因此,如果我有10个具有不同配置文件的文档,则Hibernate将运行11个SELECT查询。我不确定这是否是正常行为。
我试图将fetchtype的两侧都设置为LAZY,甚至删除了Profile侧的关系。
public class Profile {
@OneToMany(mappedBy = "profile", fetch = FetchType.LAZY, cascade = { CascadeType.DETACH, CascadeType.REFRESH })
private List<Document> documents;
public abstract class Document {
@ManyToOne(fetch = FetchType.LAZY, cascade = { CascadeType.DETACH, CascadeType.REFRESH })
@JoinColumn(name = "profile_id")
private Profile profile;
EntityManager em = _emf.createEntityManager();
try {
Query query = em.createQuery("SELECT d FROM Document d ORDER BY d.id DESC");
List<Document> documents = query.getResultList();
return documents;
} finally {
em.close();
}
我希望Hibernate仅从数据库中加载文档,而没有相关的配置文件。