在Hibernate Envers中,实体的所有相关集合都是延迟加载的,而不管设置了什么获取类型。因此,当审计查询具有其他实体集合的实体(当然都是经过审计的)时,该集合SetProxy首先是一个(在调试时可以看到)。
SetProxy
那么,如何初始化该代理?使用Hibernate.initialize()没有效果(我怀疑是因为Hibernate和Envers使用了不同的代理对象)。我知道我可以通过迭代项目来初始化集合,但是这对我来说不是一个选择,因为我在一个实体中有多个集合,更不用说维护问题了。
Hibernate.initialize()
我需要热切地初始化它们,因为我将在Hibernate会话已经关闭(将域对象转换为dtos)的稍后时间访问集合。
我正在使用Hibernate 3.5.6。
显然,这是Hibernate Envers的未解决问题。他们的JIRA中已经存在一个问题:https : //hibernate.atlassian.net/browse/HHH-3552。随便投票吧,当他们看到有些人希望对此进行修复时,也许它可以加快速度;)
在Envers团队解决此问题之前,需要进行以下工作:size()对集合进行调用会初始化代理对象。
size()