我正在使用 MassIndexer 来索引我的文档。我有一个用 @Transient 注释的方法,它引用延迟初始化的 @OneToMany 集合,如下所示:
@OneToMany
@JoinColumns({
@JoinColumn(name = "insertForeignKeyHere", referencedColumnName = "insertPrimaryKeyHere"),... })
@NotFound(action = NotFoundAction.IGNORE)
public Set<AdditionalOption> getAdditionalOptions() {
return this.additionalOptions;
}
@Transient
@IndexedEmbedded
public Set<AdditionalOption> getActiveAdditionalOptions() {
Set<AdditionalOption> ret = new HashSet<>();
//the next line produces the error
for (AdditionalOption addOpt : this.getAdditionalOptions()) {
//do stuff.
}
return ret;
}
每当我尝试使用 MassIndexer 且没有 @OneToMany(fetch = FetchType.EAGER) 来索引此文档时,我都会收到此异常:
org.hibernate.LazyInitializationException:无法延迟初始化角色集合:<...>,无法初始化代理 - 无 session
对于如何在不进行 EAGER 抓取的情况下执行此操作有什么想法吗? (我有 4 或 5 个集合,如果这没有不同的工作方式,则需要急切地获取 -> 巨大的性能问题)
提前致谢。
顺便说一句:我正在使用
<hibernate.version>4.3.1.Final</hibernate.version>
<hibernate.search.version>4.5.0.Alpha2</hibernate.search.version>
<lucene.version>3.6.2</lucene.version>
最佳答案
尝试使用版本Hibernate Search 4.5.0.Final:看起来您正在点击HSEARCH-1260 ,我们最近解决了这个问题。
关于java - MassIndexing 时 Hibernate Search 中引用代理的 transient 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21408565/