当FetchType设置为LAZY时,从数据库加载实体

时间:2019-07-02 17:44:34

标签: java hibernate jpa jpql

我不得不在某些类中将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仅从数据库中加载文档,而没有相关的配置文件。

0 个答案:

没有答案