@IndexedEmbedded在一个延迟加载的实体列表中,不会自动进入搜索索引

时间:2012-09-13 08:53:12

标签: spring hibernate lucene hibernate-search

我有一个问题,我认为应该很容易解决。

我使用Hibernate Search来索引与其他实体有关系的@Entitiy类。

每当一个实体指向另一个应该被编入索引的实体时,比如上传特定Photo的用户,我使用@IndexedEmbedded,它对HSearch的自动索引工作非常好。

但是,我也在@ManyToOne关系上设置了一些@IndexedEmbeded注释。想象一张有相关评论列表的照片。这些默认情况下是懒惰加载的,即直到实际需要时才从DB中取出。我注意到,当我添加注释时,无论多少时间过去,它都不会被编入索引,直到我进行手动重建索引。一切正常。我没有观察到任何其他的IndexedEmbedded关系,例如,如果我改变照片的位置,在几分钟内,它进入索引并且是完全可搜索的。

任何解释?溶液

2 个答案:

答案 0 :(得分:0)

我认为@IndexEmbedded的这个问题被报告为一个错误。请参阅this错误报告和固定版本。

如果您使用的版本较旧,则可能会解决您的问题。

答案 1 :(得分: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的使用。 这几乎是我认为你应该让你的例子工作。