5

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

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

每当一个实体指向另一个也应该被索引的实体时,比如上传特定照片的用户,我使用@IndexedEmbedded,它在 HSearch 的自动索引中工作得非常好。

但是,我还在 @ManyToOne 关系上设置了一些 @IndexedEmbeded 注释。想象一张包含相关评论列表的照片。这些默认情况下是延迟加载的,即在实际需要之前不会从数据库中获取。我注意到,当我添加评论时,无论经过多长时间,它都不会被索引,直到我进行手动重新索引。然后一切正常。我没有在我拥有的任何其他 IndexedEmbedded 关系中观察到这一点,例如,如果我更改照片的位置,几分钟后,它就会进入索引并且完全可搜索。

有什么解释吗?解决方案?

4

2 回答 2

1

您的映射应如下所示

@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 的使用。这几乎是我认为你应该需要让你的例子工作。

于 2012-09-25T07:49:02.283 回答
0

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

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

于 2012-09-17T18:19:04.673 回答