2011-06-22 36 views
3

我目前正在研究一个涉及使用Hibernate Search的项目。目前该项目使用纯SQL进行搜索,我们希望使用文本搜索来替代(需要知道并正确拼写第一个单词会令人讨厌)。Hibernate搜索没有正确索引嵌入的集合

模式是产品可以有多个版本,当前版本包含产品的名称。

Public Class Product extends ProgEntity 
{ 
    private List<ProductVersion> versions = new ArrayList<ProductVersion>(); 
    ... 
} 

Public Class ProductVersion extends ProgEntity 
{ 
    String productName; 
    ... 
} 

我需要能够根据名称搜索产品。我能够通过产品名称对ProductVersions进行索引,但很少有问题,但索引产品被证明是更大的问题。

经过一番研究,这是我有,但是当我更新产品的数据库没有索引创建。

@Entity 
@Indexed 
Public Class Product extends ProgEntity 
{ 
    @IndexedEmbedded 
    private List<ProductVersion> versions = new ArrayList<ProductVersion>(); 
    ... 
} 

@Entity 
@Embeddable 
Public Class ProductVersion extends ProgEntity 
{ 
    @Field 
    String productName; 
    ... 
} 

该DocumentID是ProgEntity的一部分。我需要确定,如果我更新了产品或产品版本,那么它将被正确编入索引,这似乎不会发生。

关于我在做什么不正确的建议?

回答

0

使用@Entity的ProductVersion似乎是错误的@Embeddable。还有一些JPA注释缺失。 版本集合映射为@ManyToOne@ElementCollection。 你检查过你的休眠配置和日志文件吗?你在使用哪个目录提供程序?

1

您在发布的代码中映射的Product和ProductVersion之间没有关系(例如,多对一,多对一)。这种关系必须是双向的。使用@IndexedEmbedded注释产品的收集字段,使用@ContainedIn在ProductVersion一侧反转字段,并且应该全部设置。