gpt4 book ai didi

java - 使用 Hibernate Envers 加载 ManyToOne 关系 - 急切/懒惰?

转载 作者:搜寻专家 更新时间:2023-10-31 20:32:49 26 4
gpt4 key购买 nike

我使用 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() ;
}

执行上述方法后,我的结果是经过审核的 Trgs 列表。每个 Trgs 对象当然都有正确且相关的审计工厂对象。

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

所以在我的案例中,我必须遍历 Trgs 列表并初始化每个工厂对象。

 for (Trgs trgs : resultList) {
Hibernate.initialize(trgs.getFactory());
}

所以如果我有 300 个 Trgs 对象,我必须初始化 300 个工厂对象。那要花很多钱。我得等一分钟。

我了解到无法立即加载工厂对象。但我需要其他解决方案。我在仪表板站点(Web 项目)中显示此数据。在数据加载之前,用户不能等待一分钟。

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

最佳答案

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

关于java - 使用 Hibernate Envers 加载 ManyToOne 关系 - 急切/懒惰?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36820172/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com