我使用的是Hibernate Envers 4.3.10.Final。
我有以下两个JPA类:

public class Factory {
     private int factoryID;
     ....
}

public class Trgs{
     private int trgsID;

     @ManyToOne(fetch=FetchType.EAGER)
     @JoinColumn(name="fk_factory")
     private Factory factory;
}

我编写了一种方法,可重新调整所有已审计的Trgs对象。

方法是:
public List<Trgs> readAuditedTrgs (List<Integer> trgsIds) {
      AuditReader reader = AuditReaderFactory.get(entityManager);
      AuditQuery query = reader.createQuery().forRevisionsOfEntity(Trgs.class, true, true);

      query.add(AuditEntity.id().in(ids));
      query.add(AuditEntity.revisionType().eq(RevisionType.ADD));
      query.addOrder(AuditEntity.revisionNumber().desc());
      return  query.getResultList() ;
}

执行完上述方法后,我的结果是审核的运输 list 。当然,每个Trgs对象都具有正确且相关的Audited Factory对象。

但是问题是,我了解到Hibernate Envers总是加载关系LAZY。

因此,在我的情况下,我必须遍历Trgs列表并初始化每个Factory对象。
 for (Trgs trgs : resultList) {
      Hibernate.initialize(trgs.getFactory());
    }

因此,例如,如果我有300个Trgs对象,则必须初始化300个Factory对象。这花了很多钱。我必须等一分钟。

我了解到不可能急于加载Factory对象。但我需要其他解决方案。我在Dashboad网站(Web项目)中显示此数据。用户不能等待一分钟,直到数据加载。

请帮助我解决这个问题。谢谢。

最佳答案

Envers AuditQuery API可以使用许多改进,这可能是其自身缺点的一个很好的例子。我已将HHH-11479添加到JIRA中以跟踪此功能。

关于java - 通过 hibernate Envers加载ManyToOne关系-渴望/懒惰?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36820172/

10-10 08:01