2011-06-22 35 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一側反轉字段,並且應該全部設置。