我使用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;
}
我写了一个返回所有Audited 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() ;
}
执行上面的方法后,我的结果是一个审计的Trgs列表.每个Trgs对象当然都有正确且相关的审计工厂对象.
但问题是,我已经了解到Hibernate Envers总是加载Relation LAZY.
因此,在我的案例中,我必须遍历Trgs列表并初始化每个工厂对象.
for (Trgs trgs : resultList) {
Hibernate.initialize(trgs.getFactory());
}
因此,如果我有300个Trgs对象,我必须初始化300个工厂对象.这花费太多了.我得等一分钟.
我了解到不可能急切地加载工厂对象.但我需要另一种解决方案.我在Dashboad站点(Web项目)中显示此数据.在加载数据之前,用户不能等待一分钟.
请帮我解决这个问题.谢谢.
最佳答案 Envers AuditQuery API可以使用许多改进,这可能是其自身缺点的一个很好的例子.我已将
HHH-11479添加到JIRA以跟踪此功能.