2014-01-28 20 views
0

我正在使用MassIndexer來索引我的文檔。我有@Transient註釋的方法引用了延遲初始化集合@OneToMany像這樣:Hibernate中的瞬態方法MassIndexing搜索引用代理

@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(取= FetchType.EAGER)我得到此異常:

org.hibernate.LazyInitializationException:無法初始化懶洋洋角色的集合:< ...>,無法初始化代理 - 沒有會話

如何做到這一點沒有急切取任何想法? (我有4個或5個集合,如果這種方式工作不正常,會需要提前取用 - >巨大的性能問題)

在此先感謝。

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> 

回答

2

嘗試使用版本Hibernate搜索4.5.0.Final:它看起來像你打到HSEARCH-1260,我們最近解決了。

+0

好的。我會嘗試的。 –

+0

何時將版本添加到mvnrepository.org的maven存儲庫? –

+0

現在,我可以使用jboss repo :)。 –

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

然後調用一個方法來查詢根bean的id。

+0

這似乎並沒有得到我很多的表現,而索引,壽。 –

相關問題