2012-09-13 23 views
4

我有一個問題,我認爲應該很容易解決。@Indexed嵌入在一個懶惰加載的實體列表中,不會自動進入搜索索引

我使用Hibernate Search來索引與其他實體有關係的@Entitiy類。

每當一個實體指向另一個應該被索引的實體時,比如說上傳一張特定照片的用戶,我使用@IndexedEmbedded,這個工具在HSearch的自動索引中工作得非常好。

但是,我還在@ManyToOne關係上設置了一些@IndexedEmbeded註釋。想象一張有相關評論列表的照片。這些默認情況下是延遲加載的,即不會從DB中獲取,直到實際需要。我注意到,當我添加評論時,無論經過多少時間,它都不會被索引,直到我進行手動重新索引。然後一切正常。我沒有觀察到與我有任何其他IndexedEmbedded關係,例如,如果我在幾分鐘內更改照片的位置,它會進入索引並完全可以搜索。

任何解釋?解?

+0

如果您有_Comment_s列表的_Photo_實例,那麼您確實有_ @ OneToMany_關聯。這將有助於查看您的實際實體。還有誰是該協會的所有者,是否是雙向關聯。如果是這樣,你是否更新雙方?是的,您正在使用哪個版本的搜索? – Hardy

回答

0

我認爲@IndexEmbedded這個問題被報告爲一個錯誤。請參閱this錯誤報告和固定版本。

如果您使用的版本較舊,則可能會解決您的問題。

0

你的映射應該是這個樣子

@OneToMany(mappedBy="photo", cascade = { CascadeType.ALL}, fetch=FetchType.LAZY) 
    @IndexedEmbedded 
    @Type(type="java.util.Set") 
    private Set<Comment> comments; 

................................ ...................

........................... .........................

@ContainedIn 
@ManyToOne 
    @JoinColumn(name="PHOTO_ID") 
    private Photo photo; 

注關係(使用的mappedBy)的雙向性和使用@ContainedIn的。 這幾乎是我認爲你應該讓你的例子工作。

+1

試過了。儘管如此,即使經過了相當長的時間,評論也沒有達到指標。 – preslavrachev

+0

看起來是時候深入探究發生的事情了。嘗試啓用Hibernate搜索調試,看看你是否發現了一些東西! – Shailendra