2014-02-14 43 views
1

使用Hibernate搜索版本V4.5.0,我特林使用類似使用@containedIn和的includepaths

@IndexedEmbedded(depth = 0, includePaths = {"id", "name"}) 

,而不是

@IndexedEmbedded(depth = 1) 

在我不需要的所有細節的情況下關聯的類,但只有一個或兩個字段。我遇到的問題是,關係另一方的@ContainedIn現在似乎沒有效果。我認爲「includePaths」的意思是讓你可以索引超出指定深度範圍的信息。如果是這樣,當關聯實體更改時如何保持主實體索引同步?

更糟糕的是我發現設置includePaths看似無關的條目也打破了我的@containedIn邏輯。

例如「Person」對象包含一組「Card」對象。

public class Person { 
    ... 
    @IndexedEmbedded(depth = 1) 
    private Set<Card> cards = new HashSet<Card>(0); 
    ... 
} 

「卡」對象的類型爲「西裝」。

public class Card { 
    ... 
    private Person person; 

    @Field 
    private String cardName;//e.g. jack, queen, king 

    @IndexedEmbedded(depth = 0, includePaths = {"id"})//???????????? 
    private Suit suit;//e.g. hearts, diamonds 

    ... 
    @ContainedIn 
    public Person getPerson() { 
    return this.person; 
    } 
} 

與上面的代碼,一個CRUD操作卡僅反映上證指數本身,而不是體現在誰擁有該卡的人物索引。不過,如果我對西服改變​​看似不相關的註釋從

@IndexedEmbedded(depth = 0, includePaths = {"id"}) 

@IndexedEmbedded(depth = 1, includePaths = {"id"}) 

然後,兩個卡和個人的entites被更新。

回答

0

「includePaths」不會爲給定「深度」以外的信息編制索引,因此您至少需要「深度= 1」才能使「includePaths」正常工作。

由於您使用「includePaths」,只有您指定的路徑將被編入索引,我認爲這是您想要的。

第66頁(物理第58頁)在this文件中有詳細說明。

+0

對不起,回覆遲了,我失去了這個線程跟蹤。據我可以看到從文檔你可以看到: - 1.深度= 0是有效的*「當使用includePaths,並保持深度未定義,行爲等同於設置depth = 0:只有包含的路徑索引」 * 2.它的索引超出指定的深度。如例4:10所示,*「parents.parents.parents.name」*的索引超出了深度。 我真正的問題是關係的另一方@containedIn不更新它指向的東西的索引。 – user2046211