我正在使用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:懒得初始化角色集合:&lt; ...&gt;,无法初始化代理 - 没有会话
关于如何在没有EAGER抓取的情况下执行此操作的任何想法? (我有4个或5个集合,如果这不起作用,需要急切的提取 - &gt;巨大的性能问题)
提前致谢。
btw:我正在使用
<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>
答案 0 :(得分:2)
尝试使用版本 Hibernate Search 4.5.0.Final :看起来你正在点击我们最近解决的HSEARCH-1260。
答案 1 :(得分:0)
如果没有其他方法可以做到这一点,我将使用这种解决方法(使用与第一次发布时不同的bean类)。但我真的不喜欢它。
public static FeatureValueRepository featureValueRepository;
private static final Lock featureValueRepositoryLock = new ReentrantLock();
private static FeatureValueRepository getFeatureValueRepository() {
featureValueRepositoryLock.lock();
try {
if (featureValueRepository == null) {
//ContextProvider is a custom class in our project
featureValueRepository = ContextProvider.getContext().getBean(
FeatureValueRepository.class);
}
return featureValueRepository;
} finally {
featureValueRepositoryLock.unlock();
}
}
然后调用一个按root-bean id查询的方法。