java - MassIndexing 时 Hibernate Search 中引用代理的 transient 方法

标签 java hibernate hibernate-search

我正在使用 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/

相关文章:

java - 无法使用 Hibernate Search 搜索子实体

java - HSEARCH000151 : Unable to get input stream from object of type byte

java - char 数据类型的用途是什么?

Java减去 float 是无穷大?

hibernate - 如何将ID映射到Grails中的其他列?

java - 坚持使用带有返回id的存储过程

java - BasicDataSource 无法解析为类型

java - 激活器 : command not found

java - 使用 spring-boot 和 spring-data 全局启用 hibernate 过滤器

java - Lucene 搜索 Luke 与 Hibernate 搜索不同的结果